package it.spoli.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import it.spoli.services.TalkMeGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
@SuppressWarnings("all")
public class InternalTalkMeParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'System'", "';'", "'package'", "'Dispatch'", "'Invitation'", "'Request'", "'Subject'", "'send'", "'to'", "'support'", "'='", "'['", "'IP'", "'port'", "']'", "'+='", "'||'", "'&&'", "'=='", "'!='", "'instanceof'", "'>='", "'<='", "'>'", "'<'", "'->'", "'..'", "'+'", "'-'", "'*'", "'**'", "'/'", "'%'", "'!'", "'as'", "'.'", "'?.'", "'*.'", "','", "'('", "')'", "'|'", "'if'", "'else'", "'switch'", "':'", "'{'", "'default'", "'}'", "'case'", "'for'", "'while'", "'do'", "'var'", "'val'", "'super'", "'::'", "'new'", "'false'", "'true'", "'null'", "'typeof'", "'throw'", "'return'", "'try'", "'finally'", "'catch'", "'=>'", "'?'", "'extends'", "'&'", "'UDP'", "'TCP'"
    };
    public static final int T__68=68;
    public static final int T__69=69;
    public static final int RULE_ID=4;
    public static final int T__66=66;
    public static final int T__67=67;
    public static final int T__64=64;
    public static final int T__29=29;
    public static final int T__65=65;
    public static final int T__28=28;
    public static final int T__62=62;
    public static final int T__27=27;
    public static final int T__63=63;
    public static final int T__26=26;
    public static final int T__25=25;
    public static final int T__24=24;
    public static final int T__23=23;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=10;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int T__61=61;
    public static final int T__60=60;
    public static final int EOF=-1;
    public static final int T__55=55;
    public static final int T__56=56;
    public static final int T__19=19;
    public static final int T__57=57;
    public static final int T__58=58;
    public static final int T__51=51;
    public static final int T__16=16;
    public static final int T__52=52;
    public static final int T__15=15;
    public static final int T__53=53;
    public static final int T__18=18;
    public static final int T__54=54;
    public static final int T__17=17;
    public static final int T__12=12;
    public static final int T__11=11;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int T__59=59;
    public static final int RULE_INT=6;
    public static final int T__50=50;
    public static final int T__42=42;
    public static final int T__43=43;
    public static final int T__40=40;
    public static final int T__41=41;
    public static final int T__80=80;
    public static final int T__46=46;
    public static final int T__81=81;
    public static final int T__47=47;
    public static final int T__82=82;
    public static final int T__44=44;
    public static final int T__83=83;
    public static final int T__45=45;
    public static final int T__48=48;
    public static final int T__49=49;
    public static final int RULE_SL_COMMENT=8;
    public static final int RULE_ML_COMMENT=7;
    public static final int T__30=30;
    public static final int T__31=31;
    public static final int RULE_STRING=5;
    public static final int T__32=32;
    public static final int T__71=71;
    public static final int T__33=33;
    public static final int T__72=72;
    public static final int T__34=34;
    public static final int T__35=35;
    public static final int T__70=70;
    public static final int T__36=36;
    public static final int T__37=37;
    public static final int T__38=38;
    public static final int T__39=39;
    public static final int RULE_WS=9;
    public static final int T__76=76;
    public static final int T__75=75;
    public static final int T__74=74;
    public static final int T__73=73;
    public static final int T__79=79;
    public static final int T__78=78;
    public static final int T__77=77;

    // delegates
    // delegators


        public InternalTalkMeParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalTalkMeParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalTalkMeParser.tokenNames; }
    public String getGrammarFileName() { return "../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g"; }



     	private TalkMeGrammarAccess grammarAccess;
     	
        public InternalTalkMeParser(TokenStream input, TalkMeGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "System";	
       	}
       	
       	@Override
       	protected TalkMeGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleSystem"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:68:1: entryRuleSystem returns [EObject current=null] : iv_ruleSystem= ruleSystem EOF ;
    public final EObject entryRuleSystem() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSystem = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:69:2: (iv_ruleSystem= ruleSystem EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:70:2: iv_ruleSystem= ruleSystem EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSystemRule()); 
            }
            pushFollow(FOLLOW_ruleSystem_in_entryRuleSystem75);
            iv_ruleSystem=ruleSystem();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSystem; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleSystem85); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSystem"


    // $ANTLR start "ruleSystem"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:77:1: ruleSystem returns [EObject current=null] : (otherlv_0= 'System' ( (lv_name_1_0= RULE_ID ) ) ( (lv_package_2_0= rulePackage ) )? otherlv_3= ';' ( (lv_messages_4_0= ruleMessage ) )* ( (lv_subjects_5_0= ruleSubject ) )* ( (lv_interactions_6_0= ruleInteraction ) )* ) ;
    public final EObject ruleSystem() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_3=null;
        EObject lv_package_2_0 = null;

        EObject lv_messages_4_0 = null;

        EObject lv_subjects_5_0 = null;

        EObject lv_interactions_6_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:80:28: ( (otherlv_0= 'System' ( (lv_name_1_0= RULE_ID ) ) ( (lv_package_2_0= rulePackage ) )? otherlv_3= ';' ( (lv_messages_4_0= ruleMessage ) )* ( (lv_subjects_5_0= ruleSubject ) )* ( (lv_interactions_6_0= ruleInteraction ) )* ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:81:1: (otherlv_0= 'System' ( (lv_name_1_0= RULE_ID ) ) ( (lv_package_2_0= rulePackage ) )? otherlv_3= ';' ( (lv_messages_4_0= ruleMessage ) )* ( (lv_subjects_5_0= ruleSubject ) )* ( (lv_interactions_6_0= ruleInteraction ) )* )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:81:1: (otherlv_0= 'System' ( (lv_name_1_0= RULE_ID ) ) ( (lv_package_2_0= rulePackage ) )? otherlv_3= ';' ( (lv_messages_4_0= ruleMessage ) )* ( (lv_subjects_5_0= ruleSubject ) )* ( (lv_interactions_6_0= ruleInteraction ) )* )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:81:3: otherlv_0= 'System' ( (lv_name_1_0= RULE_ID ) ) ( (lv_package_2_0= rulePackage ) )? otherlv_3= ';' ( (lv_messages_4_0= ruleMessage ) )* ( (lv_subjects_5_0= ruleSubject ) )* ( (lv_interactions_6_0= ruleInteraction ) )*
            {
            otherlv_0=(Token)match(input,11,FOLLOW_11_in_ruleSystem122); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getSystemAccess().getSystemKeyword_0());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:85:1: ( (lv_name_1_0= RULE_ID ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:86:1: (lv_name_1_0= RULE_ID )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:86:1: (lv_name_1_0= RULE_ID )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:87:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleSystem139); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_1_0, grammarAccess.getSystemAccess().getNameIDTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getSystemRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_1_0, 
                      		"ID");
              	    
            }

            }


            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:103:2: ( (lv_package_2_0= rulePackage ) )?
            int alt1=2;
            int LA1_0 = input.LA(1);

            if ( (LA1_0==13) ) {
                alt1=1;
            }
            switch (alt1) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:104:1: (lv_package_2_0= rulePackage )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:104:1: (lv_package_2_0= rulePackage )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:105:3: lv_package_2_0= rulePackage
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getSystemAccess().getPackagePackageParserRuleCall_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_rulePackage_in_ruleSystem165);
                    lv_package_2_0=rulePackage();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getSystemRule());
                      	        }
                             		set(
                             			current, 
                             			"package",
                              		lv_package_2_0, 
                              		"Package");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            otherlv_3=(Token)match(input,12,FOLLOW_12_in_ruleSystem178); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getSystemAccess().getSemicolonKeyword_3());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:125:1: ( (lv_messages_4_0= ruleMessage ) )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( ((LA2_0>=14 && LA2_0<=16)) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:126:1: (lv_messages_4_0= ruleMessage )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:126:1: (lv_messages_4_0= ruleMessage )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:127:3: lv_messages_4_0= ruleMessage
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getSystemAccess().getMessagesMessageParserRuleCall_4_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleMessage_in_ruleSystem199);
            	    lv_messages_4_0=ruleMessage();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getSystemRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"messages",
            	              		lv_messages_4_0, 
            	              		"Message");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop2;
                }
            } while (true);

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:143:3: ( (lv_subjects_5_0= ruleSubject ) )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==17) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:144:1: (lv_subjects_5_0= ruleSubject )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:144:1: (lv_subjects_5_0= ruleSubject )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:145:3: lv_subjects_5_0= ruleSubject
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getSystemAccess().getSubjectsSubjectParserRuleCall_5_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleSubject_in_ruleSystem221);
            	    lv_subjects_5_0=ruleSubject();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getSystemRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"subjects",
            	              		lv_subjects_5_0, 
            	              		"Subject");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:161:3: ( (lv_interactions_6_0= ruleInteraction ) )*
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( (LA4_0==RULE_ID) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:162:1: (lv_interactions_6_0= ruleInteraction )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:162:1: (lv_interactions_6_0= ruleInteraction )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:163:3: lv_interactions_6_0= ruleInteraction
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getSystemAccess().getInteractionsInteractionParserRuleCall_6_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleInteraction_in_ruleSystem243);
            	    lv_interactions_6_0=ruleInteraction();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getSystemRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"interactions",
            	              		lv_interactions_6_0, 
            	              		"Interaction");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop4;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSystem"


    // $ANTLR start "entryRulePackage"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:187:1: entryRulePackage returns [EObject current=null] : iv_rulePackage= rulePackage EOF ;
    public final EObject entryRulePackage() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePackage = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:188:2: (iv_rulePackage= rulePackage EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:189:2: iv_rulePackage= rulePackage EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPackageRule()); 
            }
            pushFollow(FOLLOW_rulePackage_in_entryRulePackage280);
            iv_rulePackage=rulePackage();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePackage; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRulePackage290); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePackage"


    // $ANTLR start "rulePackage"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:196:1: rulePackage returns [EObject current=null] : (otherlv_0= 'package' ( (lv_name_1_0= ruleQualifiedName ) ) ) ;
    public final EObject rulePackage() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        AntlrDatatypeRuleToken lv_name_1_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:199:28: ( (otherlv_0= 'package' ( (lv_name_1_0= ruleQualifiedName ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:200:1: (otherlv_0= 'package' ( (lv_name_1_0= ruleQualifiedName ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:200:1: (otherlv_0= 'package' ( (lv_name_1_0= ruleQualifiedName ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:200:3: otherlv_0= 'package' ( (lv_name_1_0= ruleQualifiedName ) )
            {
            otherlv_0=(Token)match(input,13,FOLLOW_13_in_rulePackage327); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getPackageAccess().getPackageKeyword_0());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:204:1: ( (lv_name_1_0= ruleQualifiedName ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:205:1: (lv_name_1_0= ruleQualifiedName )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:205:1: (lv_name_1_0= ruleQualifiedName )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:206:3: lv_name_1_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getPackageAccess().getNameQualifiedNameParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleQualifiedName_in_rulePackage348);
            lv_name_1_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getPackageRule());
              	        }
                     		set(
                     			current, 
                     			"name",
                      		lv_name_1_0, 
                      		"QualifiedName");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePackage"


    // $ANTLR start "entryRuleMessage"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:230:1: entryRuleMessage returns [EObject current=null] : iv_ruleMessage= ruleMessage EOF ;
    public final EObject entryRuleMessage() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMessage = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:231:2: (iv_ruleMessage= ruleMessage EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:232:2: iv_ruleMessage= ruleMessage EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMessageRule()); 
            }
            pushFollow(FOLLOW_ruleMessage_in_entryRuleMessage384);
            iv_ruleMessage=ruleMessage();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMessage; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleMessage394); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMessage"


    // $ANTLR start "ruleMessage"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:239:1: ruleMessage returns [EObject current=null] : (this_Dispatch_0= ruleDispatch | this_Invitation_1= ruleInvitation | this_Request_2= ruleRequest ) ;
    public final EObject ruleMessage() throws RecognitionException {
        EObject current = null;

        EObject this_Dispatch_0 = null;

        EObject this_Invitation_1 = null;

        EObject this_Request_2 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:242:28: ( (this_Dispatch_0= ruleDispatch | this_Invitation_1= ruleInvitation | this_Request_2= ruleRequest ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:243:1: (this_Dispatch_0= ruleDispatch | this_Invitation_1= ruleInvitation | this_Request_2= ruleRequest )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:243:1: (this_Dispatch_0= ruleDispatch | this_Invitation_1= ruleInvitation | this_Request_2= ruleRequest )
            int alt5=3;
            switch ( input.LA(1) ) {
            case 14:
                {
                alt5=1;
                }
                break;
            case 15:
                {
                alt5=2;
                }
                break;
            case 16:
                {
                alt5=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 5, 0, input);

                throw nvae;
            }

            switch (alt5) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:244:5: this_Dispatch_0= ruleDispatch
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMessageAccess().getDispatchParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleDispatch_in_ruleMessage441);
                    this_Dispatch_0=ruleDispatch();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Dispatch_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:254:5: this_Invitation_1= ruleInvitation
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMessageAccess().getInvitationParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleInvitation_in_ruleMessage468);
                    this_Invitation_1=ruleInvitation();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Invitation_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:264:5: this_Request_2= ruleRequest
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMessageAccess().getRequestParserRuleCall_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleRequest_in_ruleMessage495);
                    this_Request_2=ruleRequest();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Request_2; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMessage"


    // $ANTLR start "entryRuleDispatch"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:280:1: entryRuleDispatch returns [EObject current=null] : iv_ruleDispatch= ruleDispatch EOF ;
    public final EObject entryRuleDispatch() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDispatch = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:281:2: (iv_ruleDispatch= ruleDispatch EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:282:2: iv_ruleDispatch= ruleDispatch EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDispatchRule()); 
            }
            pushFollow(FOLLOW_ruleDispatch_in_entryRuleDispatch530);
            iv_ruleDispatch=ruleDispatch();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDispatch; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleDispatch540); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDispatch"


    // $ANTLR start "ruleDispatch"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:289:1: ruleDispatch returns [EObject current=null] : (otherlv_0= 'Dispatch' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' ) ;
    public final EObject ruleDispatch() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:292:28: ( (otherlv_0= 'Dispatch' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:293:1: (otherlv_0= 'Dispatch' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:293:1: (otherlv_0= 'Dispatch' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:293:3: otherlv_0= 'Dispatch' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';'
            {
            otherlv_0=(Token)match(input,14,FOLLOW_14_in_ruleDispatch577); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getDispatchAccess().getDispatchKeyword_0());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:297:1: ( (lv_name_1_0= RULE_ID ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:298:1: (lv_name_1_0= RULE_ID )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:298:1: (lv_name_1_0= RULE_ID )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:299:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleDispatch594); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_1_0, grammarAccess.getDispatchAccess().getNameIDTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getDispatchRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_1_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleDispatch611); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getDispatchAccess().getSemicolonKeyword_2());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDispatch"


    // $ANTLR start "entryRuleInvitation"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:327:1: entryRuleInvitation returns [EObject current=null] : iv_ruleInvitation= ruleInvitation EOF ;
    public final EObject entryRuleInvitation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInvitation = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:328:2: (iv_ruleInvitation= ruleInvitation EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:329:2: iv_ruleInvitation= ruleInvitation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getInvitationRule()); 
            }
            pushFollow(FOLLOW_ruleInvitation_in_entryRuleInvitation647);
            iv_ruleInvitation=ruleInvitation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleInvitation; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleInvitation657); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInvitation"


    // $ANTLR start "ruleInvitation"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:336:1: ruleInvitation returns [EObject current=null] : (otherlv_0= 'Invitation' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' ) ;
    public final EObject ruleInvitation() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:339:28: ( (otherlv_0= 'Invitation' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:340:1: (otherlv_0= 'Invitation' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:340:1: (otherlv_0= 'Invitation' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:340:3: otherlv_0= 'Invitation' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';'
            {
            otherlv_0=(Token)match(input,15,FOLLOW_15_in_ruleInvitation694); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getInvitationAccess().getInvitationKeyword_0());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:344:1: ( (lv_name_1_0= RULE_ID ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:345:1: (lv_name_1_0= RULE_ID )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:345:1: (lv_name_1_0= RULE_ID )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:346:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleInvitation711); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_1_0, grammarAccess.getInvitationAccess().getNameIDTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getInvitationRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_1_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleInvitation728); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getInvitationAccess().getSemicolonKeyword_2());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInvitation"


    // $ANTLR start "entryRuleRequest"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:374:1: entryRuleRequest returns [EObject current=null] : iv_ruleRequest= ruleRequest EOF ;
    public final EObject entryRuleRequest() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRequest = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:375:2: (iv_ruleRequest= ruleRequest EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:376:2: iv_ruleRequest= ruleRequest EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getRequestRule()); 
            }
            pushFollow(FOLLOW_ruleRequest_in_entryRuleRequest764);
            iv_ruleRequest=ruleRequest();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleRequest; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleRequest774); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRequest"


    // $ANTLR start "ruleRequest"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:383:1: ruleRequest returns [EObject current=null] : (otherlv_0= 'Request' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' ) ;
    public final EObject ruleRequest() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:386:28: ( (otherlv_0= 'Request' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:387:1: (otherlv_0= 'Request' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:387:1: (otherlv_0= 'Request' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:387:3: otherlv_0= 'Request' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';'
            {
            otherlv_0=(Token)match(input,16,FOLLOW_16_in_ruleRequest811); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getRequestAccess().getRequestKeyword_0());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:391:1: ( (lv_name_1_0= RULE_ID ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:392:1: (lv_name_1_0= RULE_ID )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:392:1: (lv_name_1_0= RULE_ID )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:393:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRequest828); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_1_0, grammarAccess.getRequestAccess().getNameIDTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getRequestRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_1_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleRequest845); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getRequestAccess().getSemicolonKeyword_2());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRequest"


    // $ANTLR start "entryRuleSubject"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:421:1: entryRuleSubject returns [EObject current=null] : iv_ruleSubject= ruleSubject EOF ;
    public final EObject entryRuleSubject() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSubject = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:422:2: (iv_ruleSubject= ruleSubject EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:423:2: iv_ruleSubject= ruleSubject EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSubjectRule()); 
            }
            pushFollow(FOLLOW_ruleSubject_in_entryRuleSubject881);
            iv_ruleSubject=ruleSubject();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSubject; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleSubject891); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSubject"


    // $ANTLR start "ruleSubject"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:430:1: ruleSubject returns [EObject current=null] : (otherlv_0= 'Subject' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' ) ;
    public final EObject ruleSubject() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:433:28: ( (otherlv_0= 'Subject' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:434:1: (otherlv_0= 'Subject' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:434:1: (otherlv_0= 'Subject' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:434:3: otherlv_0= 'Subject' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ';'
            {
            otherlv_0=(Token)match(input,17,FOLLOW_17_in_ruleSubject928); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getSubjectAccess().getSubjectKeyword_0());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:438:1: ( (lv_name_1_0= RULE_ID ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:439:1: (lv_name_1_0= RULE_ID )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:439:1: (lv_name_1_0= RULE_ID )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:440:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleSubject945); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_1_0, grammarAccess.getSubjectAccess().getNameIDTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getSubjectRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_1_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_ruleSubject962); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getSubjectAccess().getSemicolonKeyword_2());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSubject"


    // $ANTLR start "entryRuleInteraction"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:468:1: entryRuleInteraction returns [EObject current=null] : iv_ruleInteraction= ruleInteraction EOF ;
    public final EObject entryRuleInteraction() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInteraction = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:469:2: (iv_ruleInteraction= ruleInteraction EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:470:2: iv_ruleInteraction= ruleInteraction EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getInteractionRule()); 
            }
            pushFollow(FOLLOW_ruleInteraction_in_entryRuleInteraction998);
            iv_ruleInteraction=ruleInteraction();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleInteraction; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleInteraction1008); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInteraction"


    // $ANTLR start "ruleInteraction"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:477:1: ruleInteraction returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) otherlv_1= 'send' ( (otherlv_2= RULE_ID ) ) otherlv_3= 'to' ( (otherlv_4= RULE_ID ) ) ( (lv_support_5_0= ruleSupport ) )? otherlv_6= ';' ) ;
    public final EObject ruleInteraction() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_support_5_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:480:28: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= 'send' ( (otherlv_2= RULE_ID ) ) otherlv_3= 'to' ( (otherlv_4= RULE_ID ) ) ( (lv_support_5_0= ruleSupport ) )? otherlv_6= ';' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:481:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= 'send' ( (otherlv_2= RULE_ID ) ) otherlv_3= 'to' ( (otherlv_4= RULE_ID ) ) ( (lv_support_5_0= ruleSupport ) )? otherlv_6= ';' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:481:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= 'send' ( (otherlv_2= RULE_ID ) ) otherlv_3= 'to' ( (otherlv_4= RULE_ID ) ) ( (lv_support_5_0= ruleSupport ) )? otherlv_6= ';' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:481:2: ( (otherlv_0= RULE_ID ) ) otherlv_1= 'send' ( (otherlv_2= RULE_ID ) ) otherlv_3= 'to' ( (otherlv_4= RULE_ID ) ) ( (lv_support_5_0= ruleSupport ) )? otherlv_6= ';'
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:481:2: ( (otherlv_0= RULE_ID ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:482:1: (otherlv_0= RULE_ID )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:482:1: (otherlv_0= RULE_ID )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:483:3: otherlv_0= RULE_ID
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getInteractionRule());
              	        }
                      
            }
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleInteraction1053); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		newLeafNode(otherlv_0, grammarAccess.getInteractionAccess().getSenderSubjectCrossReference_0_0()); 
              	
            }

            }


            }

            otherlv_1=(Token)match(input,18,FOLLOW_18_in_ruleInteraction1065); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getInteractionAccess().getSendKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:498:1: ( (otherlv_2= RULE_ID ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:499:1: (otherlv_2= RULE_ID )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:499:1: (otherlv_2= RULE_ID )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:500:3: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getInteractionRule());
              	        }
                      
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleInteraction1085); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		newLeafNode(otherlv_2, grammarAccess.getInteractionAccess().getMsgMessageCrossReference_2_0()); 
              	
            }

            }


            }

            otherlv_3=(Token)match(input,19,FOLLOW_19_in_ruleInteraction1097); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getInteractionAccess().getToKeyword_3());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:515:1: ( (otherlv_4= RULE_ID ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:516:1: (otherlv_4= RULE_ID )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:516:1: (otherlv_4= RULE_ID )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:517:3: otherlv_4= RULE_ID
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getInteractionRule());
              	        }
                      
            }
            otherlv_4=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleInteraction1117); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		newLeafNode(otherlv_4, grammarAccess.getInteractionAccess().getReceiverSubjectCrossReference_4_0()); 
              	
            }

            }


            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:528:2: ( (lv_support_5_0= ruleSupport ) )?
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==20) ) {
                alt6=1;
            }
            switch (alt6) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:529:1: (lv_support_5_0= ruleSupport )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:529:1: (lv_support_5_0= ruleSupport )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:530:3: lv_support_5_0= ruleSupport
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getInteractionAccess().getSupportSupportParserRuleCall_5_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleSupport_in_ruleInteraction1138);
                    lv_support_5_0=ruleSupport();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getInteractionRule());
                      	        }
                             		set(
                             			current, 
                             			"support",
                              		lv_support_5_0, 
                              		"Support");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            otherlv_6=(Token)match(input,12,FOLLOW_12_in_ruleInteraction1151); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getInteractionAccess().getSemicolonKeyword_6());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInteraction"


    // $ANTLR start "entryRuleSupport"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:558:1: entryRuleSupport returns [EObject current=null] : iv_ruleSupport= ruleSupport EOF ;
    public final EObject entryRuleSupport() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSupport = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:559:2: (iv_ruleSupport= ruleSupport EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:560:2: iv_ruleSupport= ruleSupport EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSupportRule()); 
            }
            pushFollow(FOLLOW_ruleSupport_in_entryRuleSupport1187);
            iv_ruleSupport=ruleSupport();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSupport; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleSupport1197); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSupport"


    // $ANTLR start "ruleSupport"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:567:1: ruleSupport returns [EObject current=null] : (otherlv_0= 'support' otherlv_1= '=' ( (lv_protocol_2_0= ruleProtocol ) ) otherlv_3= '[' otherlv_4= 'IP' otherlv_5= '=' ( (lv_ip_6_0= RULE_STRING ) ) otherlv_7= 'port' otherlv_8= '=' ( (lv_port_9_0= RULE_INT ) ) otherlv_10= ']' ) ;
    public final EObject ruleSupport() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token lv_ip_6_0=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_port_9_0=null;
        Token otherlv_10=null;
        Enumerator lv_protocol_2_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:570:28: ( (otherlv_0= 'support' otherlv_1= '=' ( (lv_protocol_2_0= ruleProtocol ) ) otherlv_3= '[' otherlv_4= 'IP' otherlv_5= '=' ( (lv_ip_6_0= RULE_STRING ) ) otherlv_7= 'port' otherlv_8= '=' ( (lv_port_9_0= RULE_INT ) ) otherlv_10= ']' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:571:1: (otherlv_0= 'support' otherlv_1= '=' ( (lv_protocol_2_0= ruleProtocol ) ) otherlv_3= '[' otherlv_4= 'IP' otherlv_5= '=' ( (lv_ip_6_0= RULE_STRING ) ) otherlv_7= 'port' otherlv_8= '=' ( (lv_port_9_0= RULE_INT ) ) otherlv_10= ']' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:571:1: (otherlv_0= 'support' otherlv_1= '=' ( (lv_protocol_2_0= ruleProtocol ) ) otherlv_3= '[' otherlv_4= 'IP' otherlv_5= '=' ( (lv_ip_6_0= RULE_STRING ) ) otherlv_7= 'port' otherlv_8= '=' ( (lv_port_9_0= RULE_INT ) ) otherlv_10= ']' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:571:3: otherlv_0= 'support' otherlv_1= '=' ( (lv_protocol_2_0= ruleProtocol ) ) otherlv_3= '[' otherlv_4= 'IP' otherlv_5= '=' ( (lv_ip_6_0= RULE_STRING ) ) otherlv_7= 'port' otherlv_8= '=' ( (lv_port_9_0= RULE_INT ) ) otherlv_10= ']'
            {
            otherlv_0=(Token)match(input,20,FOLLOW_20_in_ruleSupport1234); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getSupportAccess().getSupportKeyword_0());
                  
            }
            otherlv_1=(Token)match(input,21,FOLLOW_21_in_ruleSupport1246); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getSupportAccess().getEqualsSignKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:579:1: ( (lv_protocol_2_0= ruleProtocol ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:580:1: (lv_protocol_2_0= ruleProtocol )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:580:1: (lv_protocol_2_0= ruleProtocol )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:581:3: lv_protocol_2_0= ruleProtocol
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getSupportAccess().getProtocolProtocolEnumRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleProtocol_in_ruleSupport1267);
            lv_protocol_2_0=ruleProtocol();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getSupportRule());
              	        }
                     		set(
                     			current, 
                     			"protocol",
                      		lv_protocol_2_0, 
                      		"Protocol");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,22,FOLLOW_22_in_ruleSupport1279); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getSupportAccess().getLeftSquareBracketKeyword_3());
                  
            }
            otherlv_4=(Token)match(input,23,FOLLOW_23_in_ruleSupport1291); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getSupportAccess().getIPKeyword_4());
                  
            }
            otherlv_5=(Token)match(input,21,FOLLOW_21_in_ruleSupport1303); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getSupportAccess().getEqualsSignKeyword_5());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:609:1: ( (lv_ip_6_0= RULE_STRING ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:610:1: (lv_ip_6_0= RULE_STRING )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:610:1: (lv_ip_6_0= RULE_STRING )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:611:3: lv_ip_6_0= RULE_STRING
            {
            lv_ip_6_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleSupport1320); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_ip_6_0, grammarAccess.getSupportAccess().getIpSTRINGTerminalRuleCall_6_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getSupportRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"ip",
                      		lv_ip_6_0, 
                      		"STRING");
              	    
            }

            }


            }

            otherlv_7=(Token)match(input,24,FOLLOW_24_in_ruleSupport1337); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_7, grammarAccess.getSupportAccess().getPortKeyword_7());
                  
            }
            otherlv_8=(Token)match(input,21,FOLLOW_21_in_ruleSupport1349); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_8, grammarAccess.getSupportAccess().getEqualsSignKeyword_8());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:635:1: ( (lv_port_9_0= RULE_INT ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:636:1: (lv_port_9_0= RULE_INT )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:636:1: (lv_port_9_0= RULE_INT )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:637:3: lv_port_9_0= RULE_INT
            {
            lv_port_9_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleSupport1366); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_port_9_0, grammarAccess.getSupportAccess().getPortINTTerminalRuleCall_9_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getSupportRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"port",
                      		lv_port_9_0, 
                      		"INT");
              	    
            }

            }


            }

            otherlv_10=(Token)match(input,25,FOLLOW_25_in_ruleSupport1383); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_10, grammarAccess.getSupportAccess().getRightSquareBracketKeyword_10());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSupport"


    // $ANTLR start "entryRuleXExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:665:1: entryRuleXExpression returns [EObject current=null] : iv_ruleXExpression= ruleXExpression EOF ;
    public final EObject entryRuleXExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:666:2: (iv_ruleXExpression= ruleXExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:667:2: iv_ruleXExpression= ruleXExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXExpression_in_entryRuleXExpression1419);
            iv_ruleXExpression=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXExpression1429); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXExpression"


    // $ANTLR start "ruleXExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:674:1: ruleXExpression returns [EObject current=null] : this_XAssignment_0= ruleXAssignment ;
    public final EObject ruleXExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XAssignment_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:677:28: (this_XAssignment_0= ruleXAssignment )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:679:5: this_XAssignment_0= ruleXAssignment
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXExpressionAccess().getXAssignmentParserRuleCall()); 
                  
            }
            pushFollow(FOLLOW_ruleXAssignment_in_ruleXExpression1475);
            this_XAssignment_0=ruleXAssignment();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XAssignment_0; 
                      afterParserOrEnumRuleCall();
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXExpression"


    // $ANTLR start "entryRuleXAssignment"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:695:1: entryRuleXAssignment returns [EObject current=null] : iv_ruleXAssignment= ruleXAssignment EOF ;
    public final EObject entryRuleXAssignment() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXAssignment = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:696:2: (iv_ruleXAssignment= ruleXAssignment EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:697:2: iv_ruleXAssignment= ruleXAssignment EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAssignmentRule()); 
            }
            pushFollow(FOLLOW_ruleXAssignment_in_entryRuleXAssignment1509);
            iv_ruleXAssignment=ruleXAssignment();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAssignment; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXAssignment1519); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXAssignment"


    // $ANTLR start "ruleXAssignment"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:704:1: ruleXAssignment returns [EObject current=null] : ( ( () ( ( ruleValidID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) ) | (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? ) ) ;
    public final EObject ruleXAssignment() throws RecognitionException {
        EObject current = null;

        EObject lv_value_3_0 = null;

        EObject this_XOrExpression_4 = null;

        EObject lv_rightOperand_7_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:707:28: ( ( ( () ( ( ruleValidID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) ) | (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:708:1: ( ( () ( ( ruleValidID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) ) | (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:708:1: ( ( () ( ( ruleValidID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) ) | (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? ) )
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==RULE_ID) ) {
                int LA8_1 = input.LA(2);

                if ( (LA8_1==EOF||(LA8_1>=RULE_ID && LA8_1<=RULE_INT)||LA8_1==12||LA8_1==22||(LA8_1>=25 && LA8_1<=51)||(LA8_1>=53 && LA8_1<=78)) ) {
                    alt8=2;
                }
                else if ( (LA8_1==21) ) {
                    alt8=1;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 8, 1, input);

                    throw nvae;
                }
            }
            else if ( ((LA8_0>=RULE_STRING && LA8_0<=RULE_INT)||LA8_0==22||LA8_0==35||(LA8_0>=38 && LA8_0<=39)||LA8_0==44||LA8_0==50||LA8_0==53||LA8_0==55||LA8_0==57||(LA8_0>=61 && LA8_0<=63)||LA8_0==66||(LA8_0>=68 && LA8_0<=75)) ) {
                alt8=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 8, 0, input);

                throw nvae;
            }
            switch (alt8) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:708:2: ( () ( ( ruleValidID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:708:2: ( () ( ( ruleValidID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:708:3: () ( ( ruleValidID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:708:3: ()
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:709:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getXAssignmentAccess().getXAssignmentAction_0_0(),
                                  current);
                          
                    }

                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:714:2: ( ( ruleValidID ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:715:1: ( ruleValidID )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:715:1: ( ruleValidID )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:716:3: ruleValidID
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getXAssignmentRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleValidID_in_ruleXAssignment1577);
                    ruleValidID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXAssignmentAccess().getOpSingleAssignParserRuleCall_0_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleOpSingleAssign_in_ruleXAssignment1593);
                    ruleOpSingleAssign();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              afterParserOrEnumRuleCall();
                          
                    }
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:737:1: ( (lv_value_3_0= ruleXAssignment ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:738:1: (lv_value_3_0= ruleXAssignment )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:738:1: (lv_value_3_0= ruleXAssignment )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:739:3: lv_value_3_0= ruleXAssignment
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXAssignmentAccess().getValueXAssignmentParserRuleCall_0_3_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleXAssignment_in_ruleXAssignment1613);
                    lv_value_3_0=ruleXAssignment();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXAssignmentRule());
                      	        }
                             		set(
                             			current, 
                             			"value",
                              		lv_value_3_0, 
                              		"XAssignment");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:756:6: (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:756:6: (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:757:5: this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )?
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXAssignmentAccess().getXOrExpressionParserRuleCall_1_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXOrExpression_in_ruleXAssignment1643);
                    this_XOrExpression_4=ruleXOrExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XOrExpression_4; 
                              afterParserOrEnumRuleCall();
                          
                    }
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:765:1: ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )?
                    int alt7=2;
                    int LA7_0 = input.LA(1);

                    if ( (LA7_0==26) ) {
                        int LA7_1 = input.LA(2);

                        if ( (synpred1_InternalTalkMe()) ) {
                            alt7=1;
                        }
                    }
                    switch (alt7) {
                        case 1 :
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:765:2: ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) )
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:765:2: ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:765:3: ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) )
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:770:6: ( () ( ( ruleOpMultiAssign ) ) )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:770:7: () ( ( ruleOpMultiAssign ) )
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:770:7: ()
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:771:5: 
                            {
                            if ( state.backtracking==0 ) {

                                      current = forceCreateModelElementAndSet(
                                          grammarAccess.getXAssignmentAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0(),
                                          current);
                                  
                            }

                            }

                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:776:2: ( ( ruleOpMultiAssign ) )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:777:1: ( ruleOpMultiAssign )
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:777:1: ( ruleOpMultiAssign )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:778:3: ruleOpMultiAssign
                            {
                            if ( state.backtracking==0 ) {

                              			if (current==null) {
                              	            current = createModelElement(grammarAccess.getXAssignmentRule());
                              	        }
                                      
                            }
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleOpMultiAssign_in_ruleXAssignment1696);
                            ruleOpMultiAssign();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {
                               
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }


                            }


                            }

                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:791:4: ( (lv_rightOperand_7_0= ruleXAssignment ) )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:792:1: (lv_rightOperand_7_0= ruleXAssignment )
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:792:1: (lv_rightOperand_7_0= ruleXAssignment )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:793:3: lv_rightOperand_7_0= ruleXAssignment
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXAssignmentAccess().getRightOperandXAssignmentParserRuleCall_1_1_1_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleXAssignment_in_ruleXAssignment1719);
                            lv_rightOperand_7_0=ruleXAssignment();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getXAssignmentRule());
                              	        }
                                     		set(
                                     			current, 
                                     			"rightOperand",
                                      		lv_rightOperand_7_0, 
                                      		"XAssignment");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXAssignment"


    // $ANTLR start "entryRuleOpSingleAssign"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:817:1: entryRuleOpSingleAssign returns [String current=null] : iv_ruleOpSingleAssign= ruleOpSingleAssign EOF ;
    public final String entryRuleOpSingleAssign() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpSingleAssign = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:818:2: (iv_ruleOpSingleAssign= ruleOpSingleAssign EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:819:2: iv_ruleOpSingleAssign= ruleOpSingleAssign EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpSingleAssignRule()); 
            }
            pushFollow(FOLLOW_ruleOpSingleAssign_in_entryRuleOpSingleAssign1759);
            iv_ruleOpSingleAssign=ruleOpSingleAssign();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpSingleAssign.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleOpSingleAssign1770); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpSingleAssign"


    // $ANTLR start "ruleOpSingleAssign"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:826:1: ruleOpSingleAssign returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= '=' ;
    public final AntlrDatatypeRuleToken ruleOpSingleAssign() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:829:28: (kw= '=' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:831:2: kw= '='
            {
            kw=(Token)match(input,21,FOLLOW_21_in_ruleOpSingleAssign1807); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getOpSingleAssignAccess().getEqualsSignKeyword()); 
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpSingleAssign"


    // $ANTLR start "entryRuleOpMultiAssign"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:844:1: entryRuleOpMultiAssign returns [String current=null] : iv_ruleOpMultiAssign= ruleOpMultiAssign EOF ;
    public final String entryRuleOpMultiAssign() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpMultiAssign = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:845:2: (iv_ruleOpMultiAssign= ruleOpMultiAssign EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:846:2: iv_ruleOpMultiAssign= ruleOpMultiAssign EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpMultiAssignRule()); 
            }
            pushFollow(FOLLOW_ruleOpMultiAssign_in_entryRuleOpMultiAssign1847);
            iv_ruleOpMultiAssign=ruleOpMultiAssign();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpMultiAssign.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleOpMultiAssign1858); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpMultiAssign"


    // $ANTLR start "ruleOpMultiAssign"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:853:1: ruleOpMultiAssign returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= '+=' ;
    public final AntlrDatatypeRuleToken ruleOpMultiAssign() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:856:28: (kw= '+=' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:858:2: kw= '+='
            {
            kw=(Token)match(input,26,FOLLOW_26_in_ruleOpMultiAssign1895); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getPlusSignEqualsSignKeyword()); 
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpMultiAssign"


    // $ANTLR start "entryRuleXOrExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:871:1: entryRuleXOrExpression returns [EObject current=null] : iv_ruleXOrExpression= ruleXOrExpression EOF ;
    public final EObject entryRuleXOrExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXOrExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:872:2: (iv_ruleXOrExpression= ruleXOrExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:873:2: iv_ruleXOrExpression= ruleXOrExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXOrExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXOrExpression_in_entryRuleXOrExpression1934);
            iv_ruleXOrExpression=ruleXOrExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXOrExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXOrExpression1944); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXOrExpression"


    // $ANTLR start "ruleXOrExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:880:1: ruleXOrExpression returns [EObject current=null] : (this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )* ) ;
    public final EObject ruleXOrExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XAndExpression_0 = null;

        EObject lv_rightOperand_3_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:883:28: ( (this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )* ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:884:1: (this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )* )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:884:1: (this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )* )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:885:5: this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXOrExpressionAccess().getXAndExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleXAndExpression_in_ruleXOrExpression1991);
            this_XAndExpression_0=ruleXAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XAndExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:893:1: ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

                if ( (LA9_0==27) ) {
                    int LA9_2 = input.LA(2);

                    if ( (synpred2_InternalTalkMe()) ) {
                        alt9=1;
                    }


                }


                switch (alt9) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:893:2: ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:893:2: ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:893:3: ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:898:6: ( () ( ( ruleOpOr ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:898:7: () ( ( ruleOpOr ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:898:7: ()
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:899:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXOrExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:904:2: ( ( ruleOpOr ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:905:1: ( ruleOpOr )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:905:1: ( ruleOpOr )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:906:3: ruleOpOr
            	    {
            	    if ( state.backtracking==0 ) {

            	      			if (current==null) {
            	      	            current = createModelElement(grammarAccess.getXOrExpressionRule());
            	      	        }
            	              
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXOrExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleOpOr_in_ruleXOrExpression2044);
            	    ruleOpOr();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {
            	       
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:919:4: ( (lv_rightOperand_3_0= ruleXAndExpression ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:920:1: (lv_rightOperand_3_0= ruleXAndExpression )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:920:1: (lv_rightOperand_3_0= ruleXAndExpression )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:921:3: lv_rightOperand_3_0= ruleXAndExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXOrExpressionAccess().getRightOperandXAndExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleXAndExpression_in_ruleXOrExpression2067);
            	    lv_rightOperand_3_0=ruleXAndExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getXOrExpressionRule());
            	      	        }
            	             		set(
            	             			current, 
            	             			"rightOperand",
            	              		lv_rightOperand_3_0, 
            	              		"XAndExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop9;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXOrExpression"


    // $ANTLR start "entryRuleOpOr"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:945:1: entryRuleOpOr returns [String current=null] : iv_ruleOpOr= ruleOpOr EOF ;
    public final String entryRuleOpOr() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpOr = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:946:2: (iv_ruleOpOr= ruleOpOr EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:947:2: iv_ruleOpOr= ruleOpOr EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpOrRule()); 
            }
            pushFollow(FOLLOW_ruleOpOr_in_entryRuleOpOr2106);
            iv_ruleOpOr=ruleOpOr();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpOr.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleOpOr2117); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpOr"


    // $ANTLR start "ruleOpOr"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:954:1: ruleOpOr returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= '||' ;
    public final AntlrDatatypeRuleToken ruleOpOr() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:957:28: (kw= '||' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:959:2: kw= '||'
            {
            kw=(Token)match(input,27,FOLLOW_27_in_ruleOpOr2154); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getOpOrAccess().getVerticalLineVerticalLineKeyword()); 
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpOr"


    // $ANTLR start "entryRuleXAndExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:972:1: entryRuleXAndExpression returns [EObject current=null] : iv_ruleXAndExpression= ruleXAndExpression EOF ;
    public final EObject entryRuleXAndExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXAndExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:973:2: (iv_ruleXAndExpression= ruleXAndExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:974:2: iv_ruleXAndExpression= ruleXAndExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAndExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXAndExpression_in_entryRuleXAndExpression2193);
            iv_ruleXAndExpression=ruleXAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAndExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXAndExpression2203); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXAndExpression"


    // $ANTLR start "ruleXAndExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:981:1: ruleXAndExpression returns [EObject current=null] : (this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )* ) ;
    public final EObject ruleXAndExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XEqualityExpression_0 = null;

        EObject lv_rightOperand_3_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:984:28: ( (this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )* ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:985:1: (this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )* )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:985:1: (this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )* )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:986:5: this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXAndExpressionAccess().getXEqualityExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleXEqualityExpression_in_ruleXAndExpression2250);
            this_XEqualityExpression_0=ruleXEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XEqualityExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:994:1: ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )*
            loop10:
            do {
                int alt10=2;
                int LA10_0 = input.LA(1);

                if ( (LA10_0==28) ) {
                    int LA10_2 = input.LA(2);

                    if ( (synpred3_InternalTalkMe()) ) {
                        alt10=1;
                    }


                }


                switch (alt10) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:994:2: ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:994:2: ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:994:3: ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:999:6: ( () ( ( ruleOpAnd ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:999:7: () ( ( ruleOpAnd ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:999:7: ()
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1000:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXAndExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1005:2: ( ( ruleOpAnd ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1006:1: ( ruleOpAnd )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1006:1: ( ruleOpAnd )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1007:3: ruleOpAnd
            	    {
            	    if ( state.backtracking==0 ) {

            	      			if (current==null) {
            	      	            current = createModelElement(grammarAccess.getXAndExpressionRule());
            	      	        }
            	              
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXAndExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleOpAnd_in_ruleXAndExpression2303);
            	    ruleOpAnd();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {
            	       
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1020:4: ( (lv_rightOperand_3_0= ruleXEqualityExpression ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1021:1: (lv_rightOperand_3_0= ruleXEqualityExpression )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1021:1: (lv_rightOperand_3_0= ruleXEqualityExpression )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1022:3: lv_rightOperand_3_0= ruleXEqualityExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXAndExpressionAccess().getRightOperandXEqualityExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleXEqualityExpression_in_ruleXAndExpression2326);
            	    lv_rightOperand_3_0=ruleXEqualityExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getXAndExpressionRule());
            	      	        }
            	             		set(
            	             			current, 
            	             			"rightOperand",
            	              		lv_rightOperand_3_0, 
            	              		"XEqualityExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop10;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXAndExpression"


    // $ANTLR start "entryRuleOpAnd"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1046:1: entryRuleOpAnd returns [String current=null] : iv_ruleOpAnd= ruleOpAnd EOF ;
    public final String entryRuleOpAnd() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpAnd = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1047:2: (iv_ruleOpAnd= ruleOpAnd EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1048:2: iv_ruleOpAnd= ruleOpAnd EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpAndRule()); 
            }
            pushFollow(FOLLOW_ruleOpAnd_in_entryRuleOpAnd2365);
            iv_ruleOpAnd=ruleOpAnd();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpAnd.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleOpAnd2376); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpAnd"


    // $ANTLR start "ruleOpAnd"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1055:1: ruleOpAnd returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= '&&' ;
    public final AntlrDatatypeRuleToken ruleOpAnd() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1058:28: (kw= '&&' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1060:2: kw= '&&'
            {
            kw=(Token)match(input,28,FOLLOW_28_in_ruleOpAnd2413); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getOpAndAccess().getAmpersandAmpersandKeyword()); 
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpAnd"


    // $ANTLR start "entryRuleXEqualityExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1073:1: entryRuleXEqualityExpression returns [EObject current=null] : iv_ruleXEqualityExpression= ruleXEqualityExpression EOF ;
    public final EObject entryRuleXEqualityExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXEqualityExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1074:2: (iv_ruleXEqualityExpression= ruleXEqualityExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1075:2: iv_ruleXEqualityExpression= ruleXEqualityExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXEqualityExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXEqualityExpression_in_entryRuleXEqualityExpression2452);
            iv_ruleXEqualityExpression=ruleXEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXEqualityExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXEqualityExpression2462); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXEqualityExpression"


    // $ANTLR start "ruleXEqualityExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1082:1: ruleXEqualityExpression returns [EObject current=null] : (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* ) ;
    public final EObject ruleXEqualityExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XRelationalExpression_0 = null;

        EObject lv_rightOperand_3_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1085:28: ( (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1086:1: (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1086:1: (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1087:5: this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getXRelationalExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleXRelationalExpression_in_ruleXEqualityExpression2509);
            this_XRelationalExpression_0=ruleXRelationalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XRelationalExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1095:1: ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )*
            loop11:
            do {
                int alt11=2;
                int LA11_0 = input.LA(1);

                if ( (LA11_0==29) ) {
                    int LA11_2 = input.LA(2);

                    if ( (synpred4_InternalTalkMe()) ) {
                        alt11=1;
                    }


                }
                else if ( (LA11_0==30) ) {
                    int LA11_3 = input.LA(2);

                    if ( (synpred4_InternalTalkMe()) ) {
                        alt11=1;
                    }


                }


                switch (alt11) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1095:2: ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1095:2: ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1095:3: ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1100:6: ( () ( ( ruleOpEquality ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1100:7: () ( ( ruleOpEquality ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1100:7: ()
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1101:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXEqualityExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1106:2: ( ( ruleOpEquality ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1107:1: ( ruleOpEquality )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1107:1: ( ruleOpEquality )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1108:3: ruleOpEquality
            	    {
            	    if ( state.backtracking==0 ) {

            	      			if (current==null) {
            	      	            current = createModelElement(grammarAccess.getXEqualityExpressionRule());
            	      	        }
            	              
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleOpEquality_in_ruleXEqualityExpression2562);
            	    ruleOpEquality();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {
            	       
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1121:4: ( (lv_rightOperand_3_0= ruleXRelationalExpression ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1122:1: (lv_rightOperand_3_0= ruleXRelationalExpression )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1122:1: (lv_rightOperand_3_0= ruleXRelationalExpression )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1123:3: lv_rightOperand_3_0= ruleXRelationalExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getRightOperandXRelationalExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleXRelationalExpression_in_ruleXEqualityExpression2585);
            	    lv_rightOperand_3_0=ruleXRelationalExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getXEqualityExpressionRule());
            	      	        }
            	             		set(
            	             			current, 
            	             			"rightOperand",
            	              		lv_rightOperand_3_0, 
            	              		"XRelationalExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop11;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXEqualityExpression"


    // $ANTLR start "entryRuleOpEquality"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1147:1: entryRuleOpEquality returns [String current=null] : iv_ruleOpEquality= ruleOpEquality EOF ;
    public final String entryRuleOpEquality() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpEquality = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1148:2: (iv_ruleOpEquality= ruleOpEquality EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1149:2: iv_ruleOpEquality= ruleOpEquality EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpEqualityRule()); 
            }
            pushFollow(FOLLOW_ruleOpEquality_in_entryRuleOpEquality2624);
            iv_ruleOpEquality=ruleOpEquality();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpEquality.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleOpEquality2635); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpEquality"


    // $ANTLR start "ruleOpEquality"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1156:1: ruleOpEquality returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '==' | kw= '!=' ) ;
    public final AntlrDatatypeRuleToken ruleOpEquality() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1159:28: ( (kw= '==' | kw= '!=' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1160:1: (kw= '==' | kw= '!=' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1160:1: (kw= '==' | kw= '!=' )
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==29) ) {
                alt12=1;
            }
            else if ( (LA12_0==30) ) {
                alt12=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 12, 0, input);

                throw nvae;
            }
            switch (alt12) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1161:2: kw= '=='
                    {
                    kw=(Token)match(input,29,FOLLOW_29_in_ruleOpEquality2673); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignKeyword_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1168:2: kw= '!='
                    {
                    kw=(Token)match(input,30,FOLLOW_30_in_ruleOpEquality2692); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignKeyword_1()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpEquality"


    // $ANTLR start "entryRuleXRelationalExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1181:1: entryRuleXRelationalExpression returns [EObject current=null] : iv_ruleXRelationalExpression= ruleXRelationalExpression EOF ;
    public final EObject entryRuleXRelationalExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXRelationalExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1182:2: (iv_ruleXRelationalExpression= ruleXRelationalExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1183:2: iv_ruleXRelationalExpression= ruleXRelationalExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXRelationalExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXRelationalExpression_in_entryRuleXRelationalExpression2732);
            iv_ruleXRelationalExpression=ruleXRelationalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXRelationalExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXRelationalExpression2742); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXRelationalExpression"


    // $ANTLR start "ruleXRelationalExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1190:1: ruleXRelationalExpression returns [EObject current=null] : (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( ( ruleQualifiedName ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* ) ;
    public final EObject ruleXRelationalExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        EObject this_XOtherOperatorExpression_0 = null;

        EObject lv_rightOperand_6_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1193:28: ( (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( ( ruleQualifiedName ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1194:1: (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( ( ruleQualifiedName ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1194:1: (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( ( ruleQualifiedName ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1195:5: this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( ( ruleQualifiedName ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getXOtherOperatorExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleXOtherOperatorExpression_in_ruleXRelationalExpression2789);
            this_XOtherOperatorExpression_0=ruleXOtherOperatorExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XOtherOperatorExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1203:1: ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( ( ruleQualifiedName ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )*
            loop13:
            do {
                int alt13=3;
                switch ( input.LA(1) ) {
                case 31:
                    {
                    int LA13_2 = input.LA(2);

                    if ( (synpred5_InternalTalkMe()) ) {
                        alt13=1;
                    }


                    }
                    break;
                case 32:
                    {
                    int LA13_3 = input.LA(2);

                    if ( (synpred6_InternalTalkMe()) ) {
                        alt13=2;
                    }


                    }
                    break;
                case 33:
                    {
                    int LA13_4 = input.LA(2);

                    if ( (synpred6_InternalTalkMe()) ) {
                        alt13=2;
                    }


                    }
                    break;
                case 34:
                    {
                    int LA13_5 = input.LA(2);

                    if ( (synpred6_InternalTalkMe()) ) {
                        alt13=2;
                    }


                    }
                    break;
                case 35:
                    {
                    int LA13_6 = input.LA(2);

                    if ( (synpred6_InternalTalkMe()) ) {
                        alt13=2;
                    }


                    }
                    break;

                }

                switch (alt13) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1203:2: ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( ( ruleQualifiedName ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1203:2: ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( ( ruleQualifiedName ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1203:3: ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( ( ruleQualifiedName ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1203:3: ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1203:4: ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1205:5: ( () otherlv_2= 'instanceof' )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1205:6: () otherlv_2= 'instanceof'
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1205:6: ()
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1206:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXRelationalExpressionAccess().getXInstanceOfExpressionExpressionAction_1_0_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    otherlv_2=(Token)match(input,31,FOLLOW_31_in_ruleXRelationalExpression2825); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_2, grammarAccess.getXRelationalExpressionAccess().getInstanceofKeyword_1_0_0_0_1());
            	          
            	    }

            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1215:3: ( ( ruleQualifiedName ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1216:1: ( ruleQualifiedName )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1216:1: ( ruleQualifiedName )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1217:3: ruleQualifiedName
            	    {
            	    if ( state.backtracking==0 ) {

            	      			if (current==null) {
            	      	            current = createModelElement(grammarAccess.getXRelationalExpressionRule());
            	      	        }
            	              
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getTypeJvmTypeCrossReference_1_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleQualifiedName_in_ruleXRelationalExpression2850);
            	    ruleQualifiedName();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {
            	       
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1231:6: ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1231:6: ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1231:7: ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1231:7: ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1231:8: ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1236:6: ( () ( ( ruleOpCompare ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1236:7: () ( ( ruleOpCompare ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1236:7: ()
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1237:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXRelationalExpressionAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1242:2: ( ( ruleOpCompare ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1243:1: ( ruleOpCompare )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1243:1: ( ruleOpCompare )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1244:3: ruleOpCompare
            	    {
            	    if ( state.backtracking==0 ) {

            	      			if (current==null) {
            	      	            current = createModelElement(grammarAccess.getXRelationalExpressionRule());
            	      	        }
            	              
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleOpCompare_in_ruleXRelationalExpression2911);
            	    ruleOpCompare();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {
            	       
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1257:4: ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1258:1: (lv_rightOperand_6_0= ruleXOtherOperatorExpression )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1258:1: (lv_rightOperand_6_0= ruleXOtherOperatorExpression )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1259:3: lv_rightOperand_6_0= ruleXOtherOperatorExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getRightOperandXOtherOperatorExpressionParserRuleCall_1_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleXOtherOperatorExpression_in_ruleXRelationalExpression2934);
            	    lv_rightOperand_6_0=ruleXOtherOperatorExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getXRelationalExpressionRule());
            	      	        }
            	             		set(
            	             			current, 
            	             			"rightOperand",
            	              		lv_rightOperand_6_0, 
            	              		"XOtherOperatorExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop13;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXRelationalExpression"


    // $ANTLR start "entryRuleOpCompare"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1283:1: entryRuleOpCompare returns [String current=null] : iv_ruleOpCompare= ruleOpCompare EOF ;
    public final String entryRuleOpCompare() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpCompare = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1284:2: (iv_ruleOpCompare= ruleOpCompare EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1285:2: iv_ruleOpCompare= ruleOpCompare EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpCompareRule()); 
            }
            pushFollow(FOLLOW_ruleOpCompare_in_entryRuleOpCompare2974);
            iv_ruleOpCompare=ruleOpCompare();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpCompare.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleOpCompare2985); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpCompare"


    // $ANTLR start "ruleOpCompare"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1292:1: ruleOpCompare returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '>=' | kw= '<=' | kw= '>' | kw= '<' ) ;
    public final AntlrDatatypeRuleToken ruleOpCompare() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1295:28: ( (kw= '>=' | kw= '<=' | kw= '>' | kw= '<' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1296:1: (kw= '>=' | kw= '<=' | kw= '>' | kw= '<' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1296:1: (kw= '>=' | kw= '<=' | kw= '>' | kw= '<' )
            int alt14=4;
            switch ( input.LA(1) ) {
            case 32:
                {
                alt14=1;
                }
                break;
            case 33:
                {
                alt14=2;
                }
                break;
            case 34:
                {
                alt14=3;
                }
                break;
            case 35:
                {
                alt14=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 14, 0, input);

                throw nvae;
            }

            switch (alt14) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1297:2: kw= '>='
                    {
                    kw=(Token)match(input,32,FOLLOW_32_in_ruleOpCompare3023); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpCompareAccess().getGreaterThanSignEqualsSignKeyword_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1304:2: kw= '<='
                    {
                    kw=(Token)match(input,33,FOLLOW_33_in_ruleOpCompare3042); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpCompareAccess().getLessThanSignEqualsSignKeyword_1()); 
                          
                    }

                    }
                    break;
                case 3 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1311:2: kw= '>'
                    {
                    kw=(Token)match(input,34,FOLLOW_34_in_ruleOpCompare3061); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpCompareAccess().getGreaterThanSignKeyword_2()); 
                          
                    }

                    }
                    break;
                case 4 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1318:2: kw= '<'
                    {
                    kw=(Token)match(input,35,FOLLOW_35_in_ruleOpCompare3080); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpCompareAccess().getLessThanSignKeyword_3()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpCompare"


    // $ANTLR start "entryRuleXOtherOperatorExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1331:1: entryRuleXOtherOperatorExpression returns [EObject current=null] : iv_ruleXOtherOperatorExpression= ruleXOtherOperatorExpression EOF ;
    public final EObject entryRuleXOtherOperatorExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXOtherOperatorExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1332:2: (iv_ruleXOtherOperatorExpression= ruleXOtherOperatorExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1333:2: iv_ruleXOtherOperatorExpression= ruleXOtherOperatorExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXOtherOperatorExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXOtherOperatorExpression_in_entryRuleXOtherOperatorExpression3120);
            iv_ruleXOtherOperatorExpression=ruleXOtherOperatorExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXOtherOperatorExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXOtherOperatorExpression3130); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXOtherOperatorExpression"


    // $ANTLR start "ruleXOtherOperatorExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1340:1: ruleXOtherOperatorExpression returns [EObject current=null] : (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* ) ;
    public final EObject ruleXOtherOperatorExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XAdditiveExpression_0 = null;

        EObject lv_rightOperand_3_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1343:28: ( (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1344:1: (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1344:1: (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1345:5: this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getXAdditiveExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleXAdditiveExpression_in_ruleXOtherOperatorExpression3177);
            this_XAdditiveExpression_0=ruleXAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XAdditiveExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1353:1: ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )*
            loop15:
            do {
                int alt15=2;
                int LA15_0 = input.LA(1);

                if ( (LA15_0==36) ) {
                    int LA15_2 = input.LA(2);

                    if ( (synpred7_InternalTalkMe()) ) {
                        alt15=1;
                    }


                }
                else if ( (LA15_0==37) ) {
                    int LA15_3 = input.LA(2);

                    if ( (synpred7_InternalTalkMe()) ) {
                        alt15=1;
                    }


                }


                switch (alt15) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1353:2: ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1353:2: ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1353:3: ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1358:6: ( () ( ( ruleOpOther ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1358:7: () ( ( ruleOpOther ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1358:7: ()
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1359:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXOtherOperatorExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1364:2: ( ( ruleOpOther ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1365:1: ( ruleOpOther )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1365:1: ( ruleOpOther )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1366:3: ruleOpOther
            	    {
            	    if ( state.backtracking==0 ) {

            	      			if (current==null) {
            	      	            current = createModelElement(grammarAccess.getXOtherOperatorExpressionRule());
            	      	        }
            	              
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleOpOther_in_ruleXOtherOperatorExpression3230);
            	    ruleOpOther();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {
            	       
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1379:4: ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1380:1: (lv_rightOperand_3_0= ruleXAdditiveExpression )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1380:1: (lv_rightOperand_3_0= ruleXAdditiveExpression )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1381:3: lv_rightOperand_3_0= ruleXAdditiveExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getRightOperandXAdditiveExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleXAdditiveExpression_in_ruleXOtherOperatorExpression3253);
            	    lv_rightOperand_3_0=ruleXAdditiveExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getXOtherOperatorExpressionRule());
            	      	        }
            	             		set(
            	             			current, 
            	             			"rightOperand",
            	              		lv_rightOperand_3_0, 
            	              		"XAdditiveExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop15;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXOtherOperatorExpression"


    // $ANTLR start "entryRuleOpOther"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1405:1: entryRuleOpOther returns [String current=null] : iv_ruleOpOther= ruleOpOther EOF ;
    public final String entryRuleOpOther() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpOther = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1406:2: (iv_ruleOpOther= ruleOpOther EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1407:2: iv_ruleOpOther= ruleOpOther EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpOtherRule()); 
            }
            pushFollow(FOLLOW_ruleOpOther_in_entryRuleOpOther3292);
            iv_ruleOpOther=ruleOpOther();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpOther.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleOpOther3303); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpOther"


    // $ANTLR start "ruleOpOther"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1414:1: ruleOpOther returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '->' | kw= '..' ) ;
    public final AntlrDatatypeRuleToken ruleOpOther() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1417:28: ( (kw= '->' | kw= '..' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1418:1: (kw= '->' | kw= '..' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1418:1: (kw= '->' | kw= '..' )
            int alt16=2;
            int LA16_0 = input.LA(1);

            if ( (LA16_0==36) ) {
                alt16=1;
            }
            else if ( (LA16_0==37) ) {
                alt16=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 16, 0, input);

                throw nvae;
            }
            switch (alt16) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1419:2: kw= '->'
                    {
                    kw=(Token)match(input,36,FOLLOW_36_in_ruleOpOther3341); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpOtherAccess().getHyphenMinusGreaterThanSignKeyword_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1426:2: kw= '..'
                    {
                    kw=(Token)match(input,37,FOLLOW_37_in_ruleOpOther3360); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpOtherAccess().getFullStopFullStopKeyword_1()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpOther"


    // $ANTLR start "entryRuleXAdditiveExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1439:1: entryRuleXAdditiveExpression returns [EObject current=null] : iv_ruleXAdditiveExpression= ruleXAdditiveExpression EOF ;
    public final EObject entryRuleXAdditiveExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXAdditiveExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1440:2: (iv_ruleXAdditiveExpression= ruleXAdditiveExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1441:2: iv_ruleXAdditiveExpression= ruleXAdditiveExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAdditiveExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXAdditiveExpression_in_entryRuleXAdditiveExpression3400);
            iv_ruleXAdditiveExpression=ruleXAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAdditiveExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXAdditiveExpression3410); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXAdditiveExpression"


    // $ANTLR start "ruleXAdditiveExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1448:1: ruleXAdditiveExpression returns [EObject current=null] : (this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )* ) ;
    public final EObject ruleXAdditiveExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XMultiplicativeExpression_0 = null;

        EObject lv_rightOperand_3_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1451:28: ( (this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )* ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1452:1: (this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )* )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1452:1: (this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )* )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1453:5: this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXAdditiveExpressionAccess().getXMultiplicativeExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleXMultiplicativeExpression_in_ruleXAdditiveExpression3457);
            this_XMultiplicativeExpression_0=ruleXMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XMultiplicativeExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1461:1: ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )*
            loop17:
            do {
                int alt17=2;
                int LA17_0 = input.LA(1);

                if ( (LA17_0==38) ) {
                    int LA17_2 = input.LA(2);

                    if ( (synpred8_InternalTalkMe()) ) {
                        alt17=1;
                    }


                }
                else if ( (LA17_0==39) ) {
                    int LA17_3 = input.LA(2);

                    if ( (synpred8_InternalTalkMe()) ) {
                        alt17=1;
                    }


                }


                switch (alt17) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1461:2: ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1461:2: ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1461:3: ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1466:6: ( () ( ( ruleOpAdd ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1466:7: () ( ( ruleOpAdd ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1466:7: ()
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1467:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXAdditiveExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1472:2: ( ( ruleOpAdd ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1473:1: ( ruleOpAdd )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1473:1: ( ruleOpAdd )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1474:3: ruleOpAdd
            	    {
            	    if ( state.backtracking==0 ) {

            	      			if (current==null) {
            	      	            current = createModelElement(grammarAccess.getXAdditiveExpressionRule());
            	      	        }
            	              
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXAdditiveExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleOpAdd_in_ruleXAdditiveExpression3510);
            	    ruleOpAdd();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {
            	       
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1487:4: ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1488:1: (lv_rightOperand_3_0= ruleXMultiplicativeExpression )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1488:1: (lv_rightOperand_3_0= ruleXMultiplicativeExpression )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1489:3: lv_rightOperand_3_0= ruleXMultiplicativeExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXAdditiveExpressionAccess().getRightOperandXMultiplicativeExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleXMultiplicativeExpression_in_ruleXAdditiveExpression3533);
            	    lv_rightOperand_3_0=ruleXMultiplicativeExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getXAdditiveExpressionRule());
            	      	        }
            	             		set(
            	             			current, 
            	             			"rightOperand",
            	              		lv_rightOperand_3_0, 
            	              		"XMultiplicativeExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop17;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXAdditiveExpression"


    // $ANTLR start "entryRuleOpAdd"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1513:1: entryRuleOpAdd returns [String current=null] : iv_ruleOpAdd= ruleOpAdd EOF ;
    public final String entryRuleOpAdd() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpAdd = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1514:2: (iv_ruleOpAdd= ruleOpAdd EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1515:2: iv_ruleOpAdd= ruleOpAdd EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpAddRule()); 
            }
            pushFollow(FOLLOW_ruleOpAdd_in_entryRuleOpAdd3572);
            iv_ruleOpAdd=ruleOpAdd();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpAdd.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleOpAdd3583); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpAdd"


    // $ANTLR start "ruleOpAdd"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1522:1: ruleOpAdd returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '+' | kw= '-' ) ;
    public final AntlrDatatypeRuleToken ruleOpAdd() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1525:28: ( (kw= '+' | kw= '-' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1526:1: (kw= '+' | kw= '-' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1526:1: (kw= '+' | kw= '-' )
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==38) ) {
                alt18=1;
            }
            else if ( (LA18_0==39) ) {
                alt18=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 18, 0, input);

                throw nvae;
            }
            switch (alt18) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1527:2: kw= '+'
                    {
                    kw=(Token)match(input,38,FOLLOW_38_in_ruleOpAdd3621); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpAddAccess().getPlusSignKeyword_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1534:2: kw= '-'
                    {
                    kw=(Token)match(input,39,FOLLOW_39_in_ruleOpAdd3640); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpAddAccess().getHyphenMinusKeyword_1()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpAdd"


    // $ANTLR start "entryRuleXMultiplicativeExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1547:1: entryRuleXMultiplicativeExpression returns [EObject current=null] : iv_ruleXMultiplicativeExpression= ruleXMultiplicativeExpression EOF ;
    public final EObject entryRuleXMultiplicativeExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXMultiplicativeExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1548:2: (iv_ruleXMultiplicativeExpression= ruleXMultiplicativeExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1549:2: iv_ruleXMultiplicativeExpression= ruleXMultiplicativeExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXMultiplicativeExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXMultiplicativeExpression_in_entryRuleXMultiplicativeExpression3680);
            iv_ruleXMultiplicativeExpression=ruleXMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXMultiplicativeExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXMultiplicativeExpression3690); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXMultiplicativeExpression"


    // $ANTLR start "ruleXMultiplicativeExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1556:1: ruleXMultiplicativeExpression returns [EObject current=null] : (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* ) ;
    public final EObject ruleXMultiplicativeExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XUnaryOperation_0 = null;

        EObject lv_rightOperand_3_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1559:28: ( (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1560:1: (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1560:1: (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1561:5: this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getXUnaryOperationParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleXUnaryOperation_in_ruleXMultiplicativeExpression3737);
            this_XUnaryOperation_0=ruleXUnaryOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XUnaryOperation_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1569:1: ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )*
            loop19:
            do {
                int alt19=2;
                switch ( input.LA(1) ) {
                case 40:
                    {
                    int LA19_2 = input.LA(2);

                    if ( (synpred9_InternalTalkMe()) ) {
                        alt19=1;
                    }


                    }
                    break;
                case 41:
                    {
                    int LA19_3 = input.LA(2);

                    if ( (synpred9_InternalTalkMe()) ) {
                        alt19=1;
                    }


                    }
                    break;
                case 42:
                    {
                    int LA19_4 = input.LA(2);

                    if ( (synpred9_InternalTalkMe()) ) {
                        alt19=1;
                    }


                    }
                    break;
                case 43:
                    {
                    int LA19_5 = input.LA(2);

                    if ( (synpred9_InternalTalkMe()) ) {
                        alt19=1;
                    }


                    }
                    break;

                }

                switch (alt19) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1569:2: ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1569:2: ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1569:3: ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1574:6: ( () ( ( ruleOpMulti ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1574:7: () ( ( ruleOpMulti ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1574:7: ()
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1575:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXMultiplicativeExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1580:2: ( ( ruleOpMulti ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1581:1: ( ruleOpMulti )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1581:1: ( ruleOpMulti )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1582:3: ruleOpMulti
            	    {
            	    if ( state.backtracking==0 ) {

            	      			if (current==null) {
            	      	            current = createModelElement(grammarAccess.getXMultiplicativeExpressionRule());
            	      	        }
            	              
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleOpMulti_in_ruleXMultiplicativeExpression3790);
            	    ruleOpMulti();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {
            	       
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1595:4: ( (lv_rightOperand_3_0= ruleXUnaryOperation ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1596:1: (lv_rightOperand_3_0= ruleXUnaryOperation )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1596:1: (lv_rightOperand_3_0= ruleXUnaryOperation )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1597:3: lv_rightOperand_3_0= ruleXUnaryOperation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getRightOperandXUnaryOperationParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleXUnaryOperation_in_ruleXMultiplicativeExpression3813);
            	    lv_rightOperand_3_0=ruleXUnaryOperation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getXMultiplicativeExpressionRule());
            	      	        }
            	             		set(
            	             			current, 
            	             			"rightOperand",
            	              		lv_rightOperand_3_0, 
            	              		"XUnaryOperation");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop19;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXMultiplicativeExpression"


    // $ANTLR start "entryRuleOpMulti"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1621:1: entryRuleOpMulti returns [String current=null] : iv_ruleOpMulti= ruleOpMulti EOF ;
    public final String entryRuleOpMulti() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpMulti = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1622:2: (iv_ruleOpMulti= ruleOpMulti EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1623:2: iv_ruleOpMulti= ruleOpMulti EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpMultiRule()); 
            }
            pushFollow(FOLLOW_ruleOpMulti_in_entryRuleOpMulti3852);
            iv_ruleOpMulti=ruleOpMulti();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpMulti.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleOpMulti3863); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpMulti"


    // $ANTLR start "ruleOpMulti"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1630:1: ruleOpMulti returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '*' | kw= '**' | kw= '/' | kw= '%' ) ;
    public final AntlrDatatypeRuleToken ruleOpMulti() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1633:28: ( (kw= '*' | kw= '**' | kw= '/' | kw= '%' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1634:1: (kw= '*' | kw= '**' | kw= '/' | kw= '%' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1634:1: (kw= '*' | kw= '**' | kw= '/' | kw= '%' )
            int alt20=4;
            switch ( input.LA(1) ) {
            case 40:
                {
                alt20=1;
                }
                break;
            case 41:
                {
                alt20=2;
                }
                break;
            case 42:
                {
                alt20=3;
                }
                break;
            case 43:
                {
                alt20=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 20, 0, input);

                throw nvae;
            }

            switch (alt20) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1635:2: kw= '*'
                    {
                    kw=(Token)match(input,40,FOLLOW_40_in_ruleOpMulti3901); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpMultiAccess().getAsteriskKeyword_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1642:2: kw= '**'
                    {
                    kw=(Token)match(input,41,FOLLOW_41_in_ruleOpMulti3920); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpMultiAccess().getAsteriskAsteriskKeyword_1()); 
                          
                    }

                    }
                    break;
                case 3 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1649:2: kw= '/'
                    {
                    kw=(Token)match(input,42,FOLLOW_42_in_ruleOpMulti3939); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpMultiAccess().getSolidusKeyword_2()); 
                          
                    }

                    }
                    break;
                case 4 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1656:2: kw= '%'
                    {
                    kw=(Token)match(input,43,FOLLOW_43_in_ruleOpMulti3958); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpMultiAccess().getPercentSignKeyword_3()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpMulti"


    // $ANTLR start "entryRuleXUnaryOperation"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1669:1: entryRuleXUnaryOperation returns [EObject current=null] : iv_ruleXUnaryOperation= ruleXUnaryOperation EOF ;
    public final EObject entryRuleXUnaryOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXUnaryOperation = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1670:2: (iv_ruleXUnaryOperation= ruleXUnaryOperation EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1671:2: iv_ruleXUnaryOperation= ruleXUnaryOperation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXUnaryOperationRule()); 
            }
            pushFollow(FOLLOW_ruleXUnaryOperation_in_entryRuleXUnaryOperation3998);
            iv_ruleXUnaryOperation=ruleXUnaryOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXUnaryOperation; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXUnaryOperation4008); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXUnaryOperation"


    // $ANTLR start "ruleXUnaryOperation"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1678:1: ruleXUnaryOperation returns [EObject current=null] : ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXCastedExpression ) ) ) | this_XCastedExpression_3= ruleXCastedExpression ) ;
    public final EObject ruleXUnaryOperation() throws RecognitionException {
        EObject current = null;

        EObject lv_operand_2_0 = null;

        EObject this_XCastedExpression_3 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1681:28: ( ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXCastedExpression ) ) ) | this_XCastedExpression_3= ruleXCastedExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1682:1: ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXCastedExpression ) ) ) | this_XCastedExpression_3= ruleXCastedExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1682:1: ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXCastedExpression ) ) ) | this_XCastedExpression_3= ruleXCastedExpression )
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( ((LA21_0>=38 && LA21_0<=39)||LA21_0==44) ) {
                alt21=1;
            }
            else if ( ((LA21_0>=RULE_ID && LA21_0<=RULE_INT)||LA21_0==22||LA21_0==35||LA21_0==50||LA21_0==53||LA21_0==55||LA21_0==57||(LA21_0>=61 && LA21_0<=63)||LA21_0==66||(LA21_0>=68 && LA21_0<=75)) ) {
                alt21=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 21, 0, input);

                throw nvae;
            }
            switch (alt21) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1682:2: ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXCastedExpression ) ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1682:2: ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXCastedExpression ) ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1682:3: () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXCastedExpression ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1682:3: ()
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1683:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getXUnaryOperationAccess().getXUnaryOperationAction_0_0(),
                                  current);
                          
                    }

                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1688:2: ( ( ruleOpUnary ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1689:1: ( ruleOpUnary )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1689:1: ( ruleOpUnary )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1690:3: ruleOpUnary
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getXUnaryOperationRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXUnaryOperationAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleOpUnary_in_ruleXUnaryOperation4066);
                    ruleOpUnary();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1703:2: ( (lv_operand_2_0= ruleXCastedExpression ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1704:1: (lv_operand_2_0= ruleXCastedExpression )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1704:1: (lv_operand_2_0= ruleXCastedExpression )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1705:3: lv_operand_2_0= ruleXCastedExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXUnaryOperationAccess().getOperandXCastedExpressionParserRuleCall_0_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleXCastedExpression_in_ruleXUnaryOperation4087);
                    lv_operand_2_0=ruleXCastedExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXUnaryOperationRule());
                      	        }
                             		set(
                             			current, 
                             			"operand",
                              		lv_operand_2_0, 
                              		"XCastedExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1723:5: this_XCastedExpression_3= ruleXCastedExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXUnaryOperationAccess().getXCastedExpressionParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXCastedExpression_in_ruleXUnaryOperation4116);
                    this_XCastedExpression_3=ruleXCastedExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XCastedExpression_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXUnaryOperation"


    // $ANTLR start "entryRuleOpUnary"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1739:1: entryRuleOpUnary returns [String current=null] : iv_ruleOpUnary= ruleOpUnary EOF ;
    public final String entryRuleOpUnary() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpUnary = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1740:2: (iv_ruleOpUnary= ruleOpUnary EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1741:2: iv_ruleOpUnary= ruleOpUnary EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpUnaryRule()); 
            }
            pushFollow(FOLLOW_ruleOpUnary_in_entryRuleOpUnary4152);
            iv_ruleOpUnary=ruleOpUnary();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpUnary.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleOpUnary4163); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpUnary"


    // $ANTLR start "ruleOpUnary"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1748:1: ruleOpUnary returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '!' | kw= '-' | kw= '+' ) ;
    public final AntlrDatatypeRuleToken ruleOpUnary() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1751:28: ( (kw= '!' | kw= '-' | kw= '+' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1752:1: (kw= '!' | kw= '-' | kw= '+' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1752:1: (kw= '!' | kw= '-' | kw= '+' )
            int alt22=3;
            switch ( input.LA(1) ) {
            case 44:
                {
                alt22=1;
                }
                break;
            case 39:
                {
                alt22=2;
                }
                break;
            case 38:
                {
                alt22=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 22, 0, input);

                throw nvae;
            }

            switch (alt22) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1753:2: kw= '!'
                    {
                    kw=(Token)match(input,44,FOLLOW_44_in_ruleOpUnary4201); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpUnaryAccess().getExclamationMarkKeyword_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1760:2: kw= '-'
                    {
                    kw=(Token)match(input,39,FOLLOW_39_in_ruleOpUnary4220); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpUnaryAccess().getHyphenMinusKeyword_1()); 
                          
                    }

                    }
                    break;
                case 3 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1767:2: kw= '+'
                    {
                    kw=(Token)match(input,38,FOLLOW_38_in_ruleOpUnary4239); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpUnaryAccess().getPlusSignKeyword_2()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpUnary"


    // $ANTLR start "entryRuleXCastedExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1780:1: entryRuleXCastedExpression returns [EObject current=null] : iv_ruleXCastedExpression= ruleXCastedExpression EOF ;
    public final EObject entryRuleXCastedExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXCastedExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1781:2: (iv_ruleXCastedExpression= ruleXCastedExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1782:2: iv_ruleXCastedExpression= ruleXCastedExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXCastedExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXCastedExpression_in_entryRuleXCastedExpression4279);
            iv_ruleXCastedExpression=ruleXCastedExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXCastedExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXCastedExpression4289); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXCastedExpression"


    // $ANTLR start "ruleXCastedExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1789:1: ruleXCastedExpression returns [EObject current=null] : (this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* ) ;
    public final EObject ruleXCastedExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        EObject this_XMemberFeatureCall_0 = null;

        EObject lv_type_3_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1792:28: ( (this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1793:1: (this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1793:1: (this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1794:5: this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXCastedExpressionAccess().getXMemberFeatureCallParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleXMemberFeatureCall_in_ruleXCastedExpression4336);
            this_XMemberFeatureCall_0=ruleXMemberFeatureCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XMemberFeatureCall_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1802:1: ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )*
            loop23:
            do {
                int alt23=2;
                int LA23_0 = input.LA(1);

                if ( (LA23_0==45) ) {
                    int LA23_2 = input.LA(2);

                    if ( (synpred10_InternalTalkMe()) ) {
                        alt23=1;
                    }


                }


                switch (alt23) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1802:2: ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1802:2: ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1802:3: ( ( () 'as' ) )=> ( () otherlv_2= 'as' )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1804:5: ( () otherlv_2= 'as' )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1804:6: () otherlv_2= 'as'
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1804:6: ()
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1805:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXCastedExpressionAccess().getXCastedExpressionTargetAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    otherlv_2=(Token)match(input,45,FOLLOW_45_in_ruleXCastedExpression4371); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_2, grammarAccess.getXCastedExpressionAccess().getAsKeyword_1_0_0_1());
            	          
            	    }

            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1814:3: ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1815:1: (lv_type_3_0= ruleJvmTypeReference )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1815:1: (lv_type_3_0= ruleJvmTypeReference )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1816:3: lv_type_3_0= ruleJvmTypeReference
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXCastedExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleJvmTypeReference_in_ruleXCastedExpression4394);
            	    lv_type_3_0=ruleJvmTypeReference();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getXCastedExpressionRule());
            	      	        }
            	             		set(
            	             			current, 
            	             			"type",
            	              		lv_type_3_0, 
            	              		"JvmTypeReference");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop23;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXCastedExpression"


    // $ANTLR start "entryRuleXMemberFeatureCall"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1840:1: entryRuleXMemberFeatureCall returns [EObject current=null] : iv_ruleXMemberFeatureCall= ruleXMemberFeatureCall EOF ;
    public final EObject entryRuleXMemberFeatureCall() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXMemberFeatureCall = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1841:2: (iv_ruleXMemberFeatureCall= ruleXMemberFeatureCall EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1842:2: iv_ruleXMemberFeatureCall= ruleXMemberFeatureCall EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXMemberFeatureCallRule()); 
            }
            pushFollow(FOLLOW_ruleXMemberFeatureCall_in_entryRuleXMemberFeatureCall4432);
            iv_ruleXMemberFeatureCall=ruleXMemberFeatureCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXMemberFeatureCall; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXMemberFeatureCall4442); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXMemberFeatureCall"


    // $ANTLR start "ruleXMemberFeatureCall"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1849:1: ruleXMemberFeatureCall returns [EObject current=null] : (this_XPrimaryExpression_0= ruleXPrimaryExpression ( ( ( ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )=> ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) ) ( (lv_value_5_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )=> ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) ) ) (otherlv_10= '<' ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) ) (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )* otherlv_14= '>' )? ( ( ruleValidID ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')' )? ) )* ) ;
    public final EObject ruleXMemberFeatureCall() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token otherlv_7=null;
        Token lv_nullSafe_8_0=null;
        Token lv_spreading_9_0=null;
        Token otherlv_10=null;
        Token otherlv_12=null;
        Token otherlv_14=null;
        Token lv_explicitOperationCall_16_0=null;
        Token otherlv_19=null;
        Token otherlv_21=null;
        EObject this_XPrimaryExpression_0 = null;

        EObject lv_value_5_0 = null;

        EObject lv_typeArguments_11_0 = null;

        EObject lv_typeArguments_13_0 = null;

        EObject lv_memberCallArguments_17_0 = null;

        EObject lv_memberCallArguments_18_0 = null;

        EObject lv_memberCallArguments_20_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1852:28: ( (this_XPrimaryExpression_0= ruleXPrimaryExpression ( ( ( ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )=> ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) ) ( (lv_value_5_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )=> ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) ) ) (otherlv_10= '<' ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) ) (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )* otherlv_14= '>' )? ( ( ruleValidID ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')' )? ) )* ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1853:1: (this_XPrimaryExpression_0= ruleXPrimaryExpression ( ( ( ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )=> ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) ) ( (lv_value_5_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )=> ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) ) ) (otherlv_10= '<' ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) ) (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )* otherlv_14= '>' )? ( ( ruleValidID ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')' )? ) )* )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1853:1: (this_XPrimaryExpression_0= ruleXPrimaryExpression ( ( ( ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )=> ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) ) ( (lv_value_5_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )=> ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) ) ) (otherlv_10= '<' ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) ) (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )* otherlv_14= '>' )? ( ( ruleValidID ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')' )? ) )* )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1854:5: this_XPrimaryExpression_0= ruleXPrimaryExpression ( ( ( ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )=> ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) ) ( (lv_value_5_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )=> ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) ) ) (otherlv_10= '<' ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) ) (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )* otherlv_14= '>' )? ( ( ruleValidID ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')' )? ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getXPrimaryExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleXPrimaryExpression_in_ruleXMemberFeatureCall4489);
            this_XPrimaryExpression_0=ruleXPrimaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XPrimaryExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1862:1: ( ( ( ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )=> ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) ) ( (lv_value_5_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )=> ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) ) ) (otherlv_10= '<' ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) ) (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )* otherlv_14= '>' )? ( ( ruleValidID ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')' )? ) )*
            loop30:
            do {
                int alt30=3;
                switch ( input.LA(1) ) {
                case 46:
                    {
                    int LA30_2 = input.LA(2);

                    if ( (synpred11_InternalTalkMe()) ) {
                        alt30=1;
                    }
                    else if ( (synpred12_InternalTalkMe()) ) {
                        alt30=2;
                    }


                    }
                    break;
                case 47:
                    {
                    int LA30_3 = input.LA(2);

                    if ( (synpred12_InternalTalkMe()) ) {
                        alt30=2;
                    }


                    }
                    break;
                case 48:
                    {
                    int LA30_4 = input.LA(2);

                    if ( (synpred12_InternalTalkMe()) ) {
                        alt30=2;
                    }


                    }
                    break;

                }

                switch (alt30) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1862:2: ( ( ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )=> ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) ) ( (lv_value_5_0= ruleXAssignment ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1862:2: ( ( ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )=> ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) ) ( (lv_value_5_0= ruleXAssignment ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1862:3: ( ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )=> ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) ) ( (lv_value_5_0= ruleXAssignment ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1862:3: ( ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )=> ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1862:4: ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )=> ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1868:25: ( () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1868:26: () otherlv_2= '.' ( ( ruleValidID ) ) ruleOpSingleAssign
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1868:26: ()
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1869:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXMemberFeatureCallAccess().getXAssignmentAssignableAction_1_0_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    otherlv_2=(Token)match(input,46,FOLLOW_46_in_ruleXMemberFeatureCall4538); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_2, grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_0_0_0_1());
            	          
            	    }
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1878:1: ( ( ruleValidID ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1879:1: ( ruleValidID )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1879:1: ( ruleValidID )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1880:3: ruleValidID
            	    {
            	    if ( state.backtracking==0 ) {

            	      			if (current==null) {
            	      	            current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
            	      	        }
            	              
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_0_2_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleValidID_in_ruleXMemberFeatureCall4561);
            	    ruleValidID();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {
            	       
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }

            	    if ( state.backtracking==0 ) {
            	       
            	              newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getOpSingleAssignParserRuleCall_1_0_0_0_3()); 
            	          
            	    }
            	    pushFollow(FOLLOW_ruleOpSingleAssign_in_ruleXMemberFeatureCall4577);
            	    ruleOpSingleAssign();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {
            	       
            	              afterParserOrEnumRuleCall();
            	          
            	    }

            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1901:3: ( (lv_value_5_0= ruleXAssignment ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1902:1: (lv_value_5_0= ruleXAssignment )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1902:1: (lv_value_5_0= ruleXAssignment )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1903:3: lv_value_5_0= ruleXAssignment
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getValueXAssignmentParserRuleCall_1_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleXAssignment_in_ruleXMemberFeatureCall4599);
            	    lv_value_5_0=ruleXAssignment();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	      	        }
            	             		set(
            	             			current, 
            	             			"value",
            	              		lv_value_5_0, 
            	              		"XAssignment");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1920:6: ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )=> ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) ) ) (otherlv_10= '<' ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) ) (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )* otherlv_14= '>' )? ( ( ruleValidID ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')' )? )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1920:6: ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )=> ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) ) ) (otherlv_10= '<' ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) ) (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )* otherlv_14= '>' )? ( ( ruleValidID ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')' )? )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1920:7: ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )=> ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) ) ) (otherlv_10= '<' ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) ) (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )* otherlv_14= '>' )? ( ( ruleValidID ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')' )?
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1920:7: ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )=> ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1920:8: ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )=> ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1936:7: ( () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1936:8: () (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1936:8: ()
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1937:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXMemberFeatureCallAccess().getXMemberFeatureCallMemberCallTargetAction_1_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1942:2: (otherlv_7= '.' | ( (lv_nullSafe_8_0= '?.' ) ) | ( (lv_spreading_9_0= '*.' ) ) )
            	    int alt24=3;
            	    switch ( input.LA(1) ) {
            	    case 46:
            	        {
            	        alt24=1;
            	        }
            	        break;
            	    case 47:
            	        {
            	        alt24=2;
            	        }
            	        break;
            	    case 48:
            	        {
            	        alt24=3;
            	        }
            	        break;
            	    default:
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 24, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt24) {
            	        case 1 :
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1942:4: otherlv_7= '.'
            	            {
            	            otherlv_7=(Token)match(input,46,FOLLOW_46_in_ruleXMemberFeatureCall4685); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_7, grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_1_0_0_1_0());
            	                  
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1947:6: ( (lv_nullSafe_8_0= '?.' ) )
            	            {
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1947:6: ( (lv_nullSafe_8_0= '?.' ) )
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1948:1: (lv_nullSafe_8_0= '?.' )
            	            {
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1948:1: (lv_nullSafe_8_0= '?.' )
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1949:3: lv_nullSafe_8_0= '?.'
            	            {
            	            lv_nullSafe_8_0=(Token)match(input,47,FOLLOW_47_in_ruleXMemberFeatureCall4709); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                      newLeafNode(lv_nullSafe_8_0, grammarAccess.getXMemberFeatureCallAccess().getNullSafeQuestionMarkFullStopKeyword_1_1_0_0_1_1_0());
            	                  
            	            }
            	            if ( state.backtracking==0 ) {

            	              	        if (current==null) {
            	              	            current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
            	              	        }
            	                     		setWithLastConsumed(current, "nullSafe", true, "?.");
            	              	    
            	            }

            	            }


            	            }


            	            }
            	            break;
            	        case 3 :
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1963:6: ( (lv_spreading_9_0= '*.' ) )
            	            {
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1963:6: ( (lv_spreading_9_0= '*.' ) )
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1964:1: (lv_spreading_9_0= '*.' )
            	            {
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1964:1: (lv_spreading_9_0= '*.' )
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1965:3: lv_spreading_9_0= '*.'
            	            {
            	            lv_spreading_9_0=(Token)match(input,48,FOLLOW_48_in_ruleXMemberFeatureCall4746); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                      newLeafNode(lv_spreading_9_0, grammarAccess.getXMemberFeatureCallAccess().getSpreadingAsteriskFullStopKeyword_1_1_0_0_1_2_0());
            	                  
            	            }
            	            if ( state.backtracking==0 ) {

            	              	        if (current==null) {
            	              	            current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
            	              	        }
            	                     		setWithLastConsumed(current, "spreading", true, "*.");
            	              	    
            	            }

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1978:5: (otherlv_10= '<' ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) ) (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )* otherlv_14= '>' )?
            	    int alt26=2;
            	    int LA26_0 = input.LA(1);

            	    if ( (LA26_0==35) ) {
            	        alt26=1;
            	    }
            	    switch (alt26) {
            	        case 1 :
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1978:7: otherlv_10= '<' ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) ) (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )* otherlv_14= '>'
            	            {
            	            otherlv_10=(Token)match(input,35,FOLLOW_35_in_ruleXMemberFeatureCall4775); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_10, grammarAccess.getXMemberFeatureCallAccess().getLessThanSignKeyword_1_1_1_0());
            	                  
            	            }
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1982:1: ( (lv_typeArguments_11_0= ruleJvmArgumentTypeReference ) )
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1983:1: (lv_typeArguments_11_0= ruleJvmArgumentTypeReference )
            	            {
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1983:1: (lv_typeArguments_11_0= ruleJvmArgumentTypeReference )
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1984:3: lv_typeArguments_11_0= ruleJvmArgumentTypeReference
            	            {
            	            if ( state.backtracking==0 ) {
            	               
            	              	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_1_0()); 
            	              	    
            	            }
            	            pushFollow(FOLLOW_ruleJvmArgumentTypeReference_in_ruleXMemberFeatureCall4796);
            	            lv_typeArguments_11_0=ruleJvmArgumentTypeReference();

            	            state._fsp--;
            	            if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              	        if (current==null) {
            	              	            current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	              	        }
            	                     		add(
            	                     			current, 
            	                     			"typeArguments",
            	                      		lv_typeArguments_11_0, 
            	                      		"JvmArgumentTypeReference");
            	              	        afterParserOrEnumRuleCall();
            	              	    
            	            }

            	            }


            	            }

            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2000:2: (otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) ) )*
            	            loop25:
            	            do {
            	                int alt25=2;
            	                int LA25_0 = input.LA(1);

            	                if ( (LA25_0==49) ) {
            	                    alt25=1;
            	                }


            	                switch (alt25) {
            	            	case 1 :
            	            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2000:4: otherlv_12= ',' ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) )
            	            	    {
            	            	    otherlv_12=(Token)match(input,49,FOLLOW_49_in_ruleXMemberFeatureCall4809); if (state.failed) return current;
            	            	    if ( state.backtracking==0 ) {

            	            	          	newLeafNode(otherlv_12, grammarAccess.getXMemberFeatureCallAccess().getCommaKeyword_1_1_1_2_0());
            	            	          
            	            	    }
            	            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2004:1: ( (lv_typeArguments_13_0= ruleJvmArgumentTypeReference ) )
            	            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2005:1: (lv_typeArguments_13_0= ruleJvmArgumentTypeReference )
            	            	    {
            	            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2005:1: (lv_typeArguments_13_0= ruleJvmArgumentTypeReference )
            	            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2006:3: lv_typeArguments_13_0= ruleJvmArgumentTypeReference
            	            	    {
            	            	    if ( state.backtracking==0 ) {
            	            	       
            	            	      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_2_1_0()); 
            	            	      	    
            	            	    }
            	            	    pushFollow(FOLLOW_ruleJvmArgumentTypeReference_in_ruleXMemberFeatureCall4830);
            	            	    lv_typeArguments_13_0=ruleJvmArgumentTypeReference();

            	            	    state._fsp--;
            	            	    if (state.failed) return current;
            	            	    if ( state.backtracking==0 ) {

            	            	      	        if (current==null) {
            	            	      	            current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	            	      	        }
            	            	             		add(
            	            	             			current, 
            	            	             			"typeArguments",
            	            	              		lv_typeArguments_13_0, 
            	            	              		"JvmArgumentTypeReference");
            	            	      	        afterParserOrEnumRuleCall();
            	            	      	    
            	            	    }

            	            	    }


            	            	    }


            	            	    }
            	            	    break;

            	            	default :
            	            	    break loop25;
            	                }
            	            } while (true);

            	            otherlv_14=(Token)match(input,34,FOLLOW_34_in_ruleXMemberFeatureCall4844); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_14, grammarAccess.getXMemberFeatureCallAccess().getGreaterThanSignKeyword_1_1_1_3());
            	                  
            	            }

            	            }
            	            break;

            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2026:3: ( ( ruleValidID ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2027:1: ( ruleValidID )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2027:1: ( ruleValidID )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2028:3: ruleValidID
            	    {
            	    if ( state.backtracking==0 ) {

            	      			if (current==null) {
            	      	            current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
            	      	        }
            	              
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_2_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleValidID_in_ruleXMemberFeatureCall4869);
            	    ruleValidID();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {
            	       
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2041:2: ( ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')' )?
            	    int alt29=2;
            	    alt29 = dfa29.predict(input);
            	    switch (alt29) {
            	        case 1 :
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2041:3: ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')'
            	            {
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2041:3: ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) )
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2041:4: ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' )
            	            {
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2048:1: (lv_explicitOperationCall_16_0= '(' )
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2049:3: lv_explicitOperationCall_16_0= '('
            	            {
            	            lv_explicitOperationCall_16_0=(Token)match(input,50,FOLLOW_50_in_ruleXMemberFeatureCall4903); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                      newLeafNode(lv_explicitOperationCall_16_0, grammarAccess.getXMemberFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_1_1_3_0_0());
            	                  
            	            }
            	            if ( state.backtracking==0 ) {

            	              	        if (current==null) {
            	              	            current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
            	              	        }
            	                     		setWithLastConsumed(current, "explicitOperationCall", true, "(");
            	              	    
            	            }

            	            }


            	            }

            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2062:2: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )?
            	            int alt28=3;
            	            alt28 = dfa28.predict(input);
            	            switch (alt28) {
            	                case 1 :
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2062:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) )
            	                    {
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2062:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) )
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2062:4: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure )
            	                    {
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2074:1: (lv_memberCallArguments_17_0= ruleXShortClosure )
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2075:3: lv_memberCallArguments_17_0= ruleXShortClosure
            	                    {
            	                    if ( state.backtracking==0 ) {
            	                       
            	                      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXShortClosureParserRuleCall_1_1_3_1_0_0()); 
            	                      	    
            	                    }
            	                    pushFollow(FOLLOW_ruleXShortClosure_in_ruleXMemberFeatureCall4978);
            	                    lv_memberCallArguments_17_0=ruleXShortClosure();

            	                    state._fsp--;
            	                    if (state.failed) return current;
            	                    if ( state.backtracking==0 ) {

            	                      	        if (current==null) {
            	                      	            current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	                      	        }
            	                             		add(
            	                             			current, 
            	                             			"memberCallArguments",
            	                              		lv_memberCallArguments_17_0, 
            	                              		"XShortClosure");
            	                      	        afterParserOrEnumRuleCall();
            	                      	    
            	                    }

            	                    }


            	                    }


            	                    }
            	                    break;
            	                case 2 :
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2092:6: ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* )
            	                    {
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2092:6: ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* )
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2092:7: ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )*
            	                    {
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2092:7: ( (lv_memberCallArguments_18_0= ruleXExpression ) )
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2093:1: (lv_memberCallArguments_18_0= ruleXExpression )
            	                    {
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2093:1: (lv_memberCallArguments_18_0= ruleXExpression )
            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2094:3: lv_memberCallArguments_18_0= ruleXExpression
            	                    {
            	                    if ( state.backtracking==0 ) {
            	                       
            	                      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_0_0()); 
            	                      	    
            	                    }
            	                    pushFollow(FOLLOW_ruleXExpression_in_ruleXMemberFeatureCall5006);
            	                    lv_memberCallArguments_18_0=ruleXExpression();

            	                    state._fsp--;
            	                    if (state.failed) return current;
            	                    if ( state.backtracking==0 ) {

            	                      	        if (current==null) {
            	                      	            current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	                      	        }
            	                             		add(
            	                             			current, 
            	                             			"memberCallArguments",
            	                              		lv_memberCallArguments_18_0, 
            	                              		"XExpression");
            	                      	        afterParserOrEnumRuleCall();
            	                      	    
            	                    }

            	                    }


            	                    }

            	                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2110:2: (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )*
            	                    loop27:
            	                    do {
            	                        int alt27=2;
            	                        int LA27_0 = input.LA(1);

            	                        if ( (LA27_0==49) ) {
            	                            alt27=1;
            	                        }


            	                        switch (alt27) {
            	                    	case 1 :
            	                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2110:4: otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) )
            	                    	    {
            	                    	    otherlv_19=(Token)match(input,49,FOLLOW_49_in_ruleXMemberFeatureCall5019); if (state.failed) return current;
            	                    	    if ( state.backtracking==0 ) {

            	                    	          	newLeafNode(otherlv_19, grammarAccess.getXMemberFeatureCallAccess().getCommaKeyword_1_1_3_1_1_1_0());
            	                    	          
            	                    	    }
            	                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2114:1: ( (lv_memberCallArguments_20_0= ruleXExpression ) )
            	                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2115:1: (lv_memberCallArguments_20_0= ruleXExpression )
            	                    	    {
            	                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2115:1: (lv_memberCallArguments_20_0= ruleXExpression )
            	                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2116:3: lv_memberCallArguments_20_0= ruleXExpression
            	                    	    {
            	                    	    if ( state.backtracking==0 ) {
            	                    	       
            	                    	      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_1_1_0()); 
            	                    	      	    
            	                    	    }
            	                    	    pushFollow(FOLLOW_ruleXExpression_in_ruleXMemberFeatureCall5040);
            	                    	    lv_memberCallArguments_20_0=ruleXExpression();

            	                    	    state._fsp--;
            	                    	    if (state.failed) return current;
            	                    	    if ( state.backtracking==0 ) {

            	                    	      	        if (current==null) {
            	                    	      	            current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	                    	      	        }
            	                    	             		add(
            	                    	             			current, 
            	                    	             			"memberCallArguments",
            	                    	              		lv_memberCallArguments_20_0, 
            	                    	              		"XExpression");
            	                    	      	        afterParserOrEnumRuleCall();
            	                    	      	    
            	                    	    }

            	                    	    }


            	                    	    }


            	                    	    }
            	                    	    break;

            	                    	default :
            	                    	    break loop27;
            	                        }
            	                    } while (true);


            	                    }


            	                    }
            	                    break;

            	            }

            	            otherlv_21=(Token)match(input,51,FOLLOW_51_in_ruleXMemberFeatureCall5057); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_21, grammarAccess.getXMemberFeatureCallAccess().getRightParenthesisKeyword_1_1_3_2());
            	                  
            	            }

            	            }
            	            break;

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop30;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXMemberFeatureCall"


    // $ANTLR start "entryRuleXPrimaryExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2144:1: entryRuleXPrimaryExpression returns [EObject current=null] : iv_ruleXPrimaryExpression= ruleXPrimaryExpression EOF ;
    public final EObject entryRuleXPrimaryExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXPrimaryExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2145:2: (iv_ruleXPrimaryExpression= ruleXPrimaryExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2146:2: iv_ruleXPrimaryExpression= ruleXPrimaryExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXPrimaryExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXPrimaryExpression_in_entryRuleXPrimaryExpression5098);
            iv_ruleXPrimaryExpression=ruleXPrimaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXPrimaryExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXPrimaryExpression5108); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXPrimaryExpression"


    // $ANTLR start "ruleXPrimaryExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2153:1: ruleXPrimaryExpression returns [EObject current=null] : (this_XConstructorCall_0= ruleXConstructorCall | this_XBlockExpression_1= ruleXBlockExpression | this_XSwitchExpression_2= ruleXSwitchExpression | this_XFeatureCall_3= ruleXFeatureCall | this_XLiteral_4= ruleXLiteral | this_XIfExpression_5= ruleXIfExpression | this_XForLoopExpression_6= ruleXForLoopExpression | this_XWhileExpression_7= ruleXWhileExpression | this_XDoWhileExpression_8= ruleXDoWhileExpression | this_XThrowExpression_9= ruleXThrowExpression | this_XReturnExpression_10= ruleXReturnExpression | this_XTryCatchFinallyExpression_11= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_12= ruleXParenthesizedExpression ) ;
    public final EObject ruleXPrimaryExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XConstructorCall_0 = null;

        EObject this_XBlockExpression_1 = null;

        EObject this_XSwitchExpression_2 = null;

        EObject this_XFeatureCall_3 = null;

        EObject this_XLiteral_4 = null;

        EObject this_XIfExpression_5 = null;

        EObject this_XForLoopExpression_6 = null;

        EObject this_XWhileExpression_7 = null;

        EObject this_XDoWhileExpression_8 = null;

        EObject this_XThrowExpression_9 = null;

        EObject this_XReturnExpression_10 = null;

        EObject this_XTryCatchFinallyExpression_11 = null;

        EObject this_XParenthesizedExpression_12 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2156:28: ( (this_XConstructorCall_0= ruleXConstructorCall | this_XBlockExpression_1= ruleXBlockExpression | this_XSwitchExpression_2= ruleXSwitchExpression | this_XFeatureCall_3= ruleXFeatureCall | this_XLiteral_4= ruleXLiteral | this_XIfExpression_5= ruleXIfExpression | this_XForLoopExpression_6= ruleXForLoopExpression | this_XWhileExpression_7= ruleXWhileExpression | this_XDoWhileExpression_8= ruleXDoWhileExpression | this_XThrowExpression_9= ruleXThrowExpression | this_XReturnExpression_10= ruleXReturnExpression | this_XTryCatchFinallyExpression_11= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_12= ruleXParenthesizedExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2157:1: (this_XConstructorCall_0= ruleXConstructorCall | this_XBlockExpression_1= ruleXBlockExpression | this_XSwitchExpression_2= ruleXSwitchExpression | this_XFeatureCall_3= ruleXFeatureCall | this_XLiteral_4= ruleXLiteral | this_XIfExpression_5= ruleXIfExpression | this_XForLoopExpression_6= ruleXForLoopExpression | this_XWhileExpression_7= ruleXWhileExpression | this_XDoWhileExpression_8= ruleXDoWhileExpression | this_XThrowExpression_9= ruleXThrowExpression | this_XReturnExpression_10= ruleXReturnExpression | this_XTryCatchFinallyExpression_11= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_12= ruleXParenthesizedExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2157:1: (this_XConstructorCall_0= ruleXConstructorCall | this_XBlockExpression_1= ruleXBlockExpression | this_XSwitchExpression_2= ruleXSwitchExpression | this_XFeatureCall_3= ruleXFeatureCall | this_XLiteral_4= ruleXLiteral | this_XIfExpression_5= ruleXIfExpression | this_XForLoopExpression_6= ruleXForLoopExpression | this_XWhileExpression_7= ruleXWhileExpression | this_XDoWhileExpression_8= ruleXDoWhileExpression | this_XThrowExpression_9= ruleXThrowExpression | this_XReturnExpression_10= ruleXReturnExpression | this_XTryCatchFinallyExpression_11= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_12= ruleXParenthesizedExpression )
            int alt31=13;
            switch ( input.LA(1) ) {
            case 68:
                {
                alt31=1;
                }
                break;
            case 57:
                {
                alt31=2;
                }
                break;
            case 55:
                {
                alt31=3;
                }
                break;
            case RULE_ID:
            case 35:
            case 66:
                {
                alt31=4;
                }
                break;
            case RULE_STRING:
            case RULE_INT:
            case 22:
            case 69:
            case 70:
            case 71:
            case 72:
                {
                alt31=5;
                }
                break;
            case 53:
                {
                alt31=6;
                }
                break;
            case 61:
                {
                alt31=7;
                }
                break;
            case 62:
                {
                alt31=8;
                }
                break;
            case 63:
                {
                alt31=9;
                }
                break;
            case 73:
                {
                alt31=10;
                }
                break;
            case 74:
                {
                alt31=11;
                }
                break;
            case 75:
                {
                alt31=12;
                }
                break;
            case 50:
                {
                alt31=13;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 31, 0, input);

                throw nvae;
            }

            switch (alt31) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2158:5: this_XConstructorCall_0= ruleXConstructorCall
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXConstructorCallParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXConstructorCall_in_ruleXPrimaryExpression5155);
                    this_XConstructorCall_0=ruleXConstructorCall();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XConstructorCall_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2168:5: this_XBlockExpression_1= ruleXBlockExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXBlockExpressionParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXBlockExpression_in_ruleXPrimaryExpression5182);
                    this_XBlockExpression_1=ruleXBlockExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XBlockExpression_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2178:5: this_XSwitchExpression_2= ruleXSwitchExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXSwitchExpressionParserRuleCall_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXSwitchExpression_in_ruleXPrimaryExpression5209);
                    this_XSwitchExpression_2=ruleXSwitchExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XSwitchExpression_2; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 4 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2188:5: this_XFeatureCall_3= ruleXFeatureCall
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXFeatureCallParserRuleCall_3()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXFeatureCall_in_ruleXPrimaryExpression5236);
                    this_XFeatureCall_3=ruleXFeatureCall();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XFeatureCall_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 5 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2198:5: this_XLiteral_4= ruleXLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXLiteralParserRuleCall_4()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXLiteral_in_ruleXPrimaryExpression5263);
                    this_XLiteral_4=ruleXLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XLiteral_4; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 6 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2208:5: this_XIfExpression_5= ruleXIfExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXIfExpressionParserRuleCall_5()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXIfExpression_in_ruleXPrimaryExpression5290);
                    this_XIfExpression_5=ruleXIfExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XIfExpression_5; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 7 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2218:5: this_XForLoopExpression_6= ruleXForLoopExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXForLoopExpressionParserRuleCall_6()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXForLoopExpression_in_ruleXPrimaryExpression5317);
                    this_XForLoopExpression_6=ruleXForLoopExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XForLoopExpression_6; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 8 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2228:5: this_XWhileExpression_7= ruleXWhileExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXWhileExpressionParserRuleCall_7()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXWhileExpression_in_ruleXPrimaryExpression5344);
                    this_XWhileExpression_7=ruleXWhileExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XWhileExpression_7; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 9 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2238:5: this_XDoWhileExpression_8= ruleXDoWhileExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXDoWhileExpressionParserRuleCall_8()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXDoWhileExpression_in_ruleXPrimaryExpression5371);
                    this_XDoWhileExpression_8=ruleXDoWhileExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XDoWhileExpression_8; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 10 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2248:5: this_XThrowExpression_9= ruleXThrowExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXThrowExpressionParserRuleCall_9()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXThrowExpression_in_ruleXPrimaryExpression5398);
                    this_XThrowExpression_9=ruleXThrowExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XThrowExpression_9; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 11 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2258:5: this_XReturnExpression_10= ruleXReturnExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXReturnExpressionParserRuleCall_10()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXReturnExpression_in_ruleXPrimaryExpression5425);
                    this_XReturnExpression_10=ruleXReturnExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XReturnExpression_10; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 12 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2268:5: this_XTryCatchFinallyExpression_11= ruleXTryCatchFinallyExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXTryCatchFinallyExpressionParserRuleCall_11()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXTryCatchFinallyExpression_in_ruleXPrimaryExpression5452);
                    this_XTryCatchFinallyExpression_11=ruleXTryCatchFinallyExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XTryCatchFinallyExpression_11; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 13 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2278:5: this_XParenthesizedExpression_12= ruleXParenthesizedExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXParenthesizedExpressionParserRuleCall_12()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXParenthesizedExpression_in_ruleXPrimaryExpression5479);
                    this_XParenthesizedExpression_12=ruleXParenthesizedExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XParenthesizedExpression_12; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXPrimaryExpression"


    // $ANTLR start "entryRuleXLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2294:1: entryRuleXLiteral returns [EObject current=null] : iv_ruleXLiteral= ruleXLiteral EOF ;
    public final EObject entryRuleXLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXLiteral = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2295:2: (iv_ruleXLiteral= ruleXLiteral EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2296:2: iv_ruleXLiteral= ruleXLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXLiteralRule()); 
            }
            pushFollow(FOLLOW_ruleXLiteral_in_entryRuleXLiteral5514);
            iv_ruleXLiteral=ruleXLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXLiteral; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXLiteral5524); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXLiteral"


    // $ANTLR start "ruleXLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2303:1: ruleXLiteral returns [EObject current=null] : (this_XClosure_0= ruleXClosure | this_XBooleanLiteral_1= ruleXBooleanLiteral | this_XIntLiteral_2= ruleXIntLiteral | this_XNullLiteral_3= ruleXNullLiteral | this_XStringLiteral_4= ruleXStringLiteral | this_XTypeLiteral_5= ruleXTypeLiteral ) ;
    public final EObject ruleXLiteral() throws RecognitionException {
        EObject current = null;

        EObject this_XClosure_0 = null;

        EObject this_XBooleanLiteral_1 = null;

        EObject this_XIntLiteral_2 = null;

        EObject this_XNullLiteral_3 = null;

        EObject this_XStringLiteral_4 = null;

        EObject this_XTypeLiteral_5 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2306:28: ( (this_XClosure_0= ruleXClosure | this_XBooleanLiteral_1= ruleXBooleanLiteral | this_XIntLiteral_2= ruleXIntLiteral | this_XNullLiteral_3= ruleXNullLiteral | this_XStringLiteral_4= ruleXStringLiteral | this_XTypeLiteral_5= ruleXTypeLiteral ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2307:1: (this_XClosure_0= ruleXClosure | this_XBooleanLiteral_1= ruleXBooleanLiteral | this_XIntLiteral_2= ruleXIntLiteral | this_XNullLiteral_3= ruleXNullLiteral | this_XStringLiteral_4= ruleXStringLiteral | this_XTypeLiteral_5= ruleXTypeLiteral )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2307:1: (this_XClosure_0= ruleXClosure | this_XBooleanLiteral_1= ruleXBooleanLiteral | this_XIntLiteral_2= ruleXIntLiteral | this_XNullLiteral_3= ruleXNullLiteral | this_XStringLiteral_4= ruleXStringLiteral | this_XTypeLiteral_5= ruleXTypeLiteral )
            int alt32=6;
            switch ( input.LA(1) ) {
            case 22:
                {
                alt32=1;
                }
                break;
            case 69:
            case 70:
                {
                alt32=2;
                }
                break;
            case RULE_INT:
                {
                alt32=3;
                }
                break;
            case 71:
                {
                alt32=4;
                }
                break;
            case RULE_STRING:
                {
                alt32=5;
                }
                break;
            case 72:
                {
                alt32=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 32, 0, input);

                throw nvae;
            }

            switch (alt32) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2308:5: this_XClosure_0= ruleXClosure
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXClosureParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXClosure_in_ruleXLiteral5571);
                    this_XClosure_0=ruleXClosure();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XClosure_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2318:5: this_XBooleanLiteral_1= ruleXBooleanLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXBooleanLiteralParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXBooleanLiteral_in_ruleXLiteral5598);
                    this_XBooleanLiteral_1=ruleXBooleanLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XBooleanLiteral_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2328:5: this_XIntLiteral_2= ruleXIntLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXIntLiteralParserRuleCall_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXIntLiteral_in_ruleXLiteral5625);
                    this_XIntLiteral_2=ruleXIntLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XIntLiteral_2; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 4 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2338:5: this_XNullLiteral_3= ruleXNullLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXNullLiteralParserRuleCall_3()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXNullLiteral_in_ruleXLiteral5652);
                    this_XNullLiteral_3=ruleXNullLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XNullLiteral_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 5 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2348:5: this_XStringLiteral_4= ruleXStringLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXStringLiteralParserRuleCall_4()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXStringLiteral_in_ruleXLiteral5679);
                    this_XStringLiteral_4=ruleXStringLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XStringLiteral_4; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 6 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2358:5: this_XTypeLiteral_5= ruleXTypeLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXTypeLiteralParserRuleCall_5()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXTypeLiteral_in_ruleXLiteral5706);
                    this_XTypeLiteral_5=ruleXTypeLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XTypeLiteral_5; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXLiteral"


    // $ANTLR start "entryRuleXClosure"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2374:1: entryRuleXClosure returns [EObject current=null] : iv_ruleXClosure= ruleXClosure EOF ;
    public final EObject entryRuleXClosure() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXClosure = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2375:2: (iv_ruleXClosure= ruleXClosure EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2376:2: iv_ruleXClosure= ruleXClosure EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXClosureRule()); 
            }
            pushFollow(FOLLOW_ruleXClosure_in_entryRuleXClosure5741);
            iv_ruleXClosure=ruleXClosure();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXClosure; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXClosure5751); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXClosure"


    // $ANTLR start "ruleXClosure"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2383:1: ruleXClosure returns [EObject current=null] : ( () otherlv_1= '[' ( ( (lv_formalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_formalParameters_4_0= ruleJvmFormalParameter ) ) )* )? otherlv_5= '|' ( (lv_expression_6_0= ruleXExpression ) ) otherlv_7= ']' ) ;
    public final EObject ruleXClosure() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        EObject lv_formalParameters_2_0 = null;

        EObject lv_formalParameters_4_0 = null;

        EObject lv_expression_6_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2386:28: ( ( () otherlv_1= '[' ( ( (lv_formalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_formalParameters_4_0= ruleJvmFormalParameter ) ) )* )? otherlv_5= '|' ( (lv_expression_6_0= ruleXExpression ) ) otherlv_7= ']' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2387:1: ( () otherlv_1= '[' ( ( (lv_formalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_formalParameters_4_0= ruleJvmFormalParameter ) ) )* )? otherlv_5= '|' ( (lv_expression_6_0= ruleXExpression ) ) otherlv_7= ']' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2387:1: ( () otherlv_1= '[' ( ( (lv_formalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_formalParameters_4_0= ruleJvmFormalParameter ) ) )* )? otherlv_5= '|' ( (lv_expression_6_0= ruleXExpression ) ) otherlv_7= ']' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2387:2: () otherlv_1= '[' ( ( (lv_formalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_formalParameters_4_0= ruleJvmFormalParameter ) ) )* )? otherlv_5= '|' ( (lv_expression_6_0= ruleXExpression ) ) otherlv_7= ']'
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2387:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2388:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXClosureAccess().getXClosureAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,22,FOLLOW_22_in_ruleXClosure5797); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXClosureAccess().getLeftSquareBracketKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2397:1: ( ( (lv_formalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_formalParameters_4_0= ruleJvmFormalParameter ) ) )* )?
            int alt34=2;
            int LA34_0 = input.LA(1);

            if ( (LA34_0==RULE_ID||LA34_0==50||LA34_0==78) ) {
                alt34=1;
            }
            switch (alt34) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2397:2: ( (lv_formalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_formalParameters_4_0= ruleJvmFormalParameter ) ) )*
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2397:2: ( (lv_formalParameters_2_0= ruleJvmFormalParameter ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2398:1: (lv_formalParameters_2_0= ruleJvmFormalParameter )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2398:1: (lv_formalParameters_2_0= ruleJvmFormalParameter )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2399:3: lv_formalParameters_2_0= ruleJvmFormalParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXClosureAccess().getFormalParametersJvmFormalParameterParserRuleCall_2_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleJvmFormalParameter_in_ruleXClosure5819);
                    lv_formalParameters_2_0=ruleJvmFormalParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXClosureRule());
                      	        }
                             		add(
                             			current, 
                             			"formalParameters",
                              		lv_formalParameters_2_0, 
                              		"JvmFormalParameter");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2415:2: (otherlv_3= ',' ( (lv_formalParameters_4_0= ruleJvmFormalParameter ) ) )*
                    loop33:
                    do {
                        int alt33=2;
                        int LA33_0 = input.LA(1);

                        if ( (LA33_0==49) ) {
                            alt33=1;
                        }


                        switch (alt33) {
                    	case 1 :
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2415:4: otherlv_3= ',' ( (lv_formalParameters_4_0= ruleJvmFormalParameter ) )
                    	    {
                    	    otherlv_3=(Token)match(input,49,FOLLOW_49_in_ruleXClosure5832); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_3, grammarAccess.getXClosureAccess().getCommaKeyword_2_1_0());
                    	          
                    	    }
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2419:1: ( (lv_formalParameters_4_0= ruleJvmFormalParameter ) )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2420:1: (lv_formalParameters_4_0= ruleJvmFormalParameter )
                    	    {
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2420:1: (lv_formalParameters_4_0= ruleJvmFormalParameter )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2421:3: lv_formalParameters_4_0= ruleJvmFormalParameter
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXClosureAccess().getFormalParametersJvmFormalParameterParserRuleCall_2_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleJvmFormalParameter_in_ruleXClosure5853);
                    	    lv_formalParameters_4_0=ruleJvmFormalParameter();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getXClosureRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"formalParameters",
                    	              		lv_formalParameters_4_0, 
                    	              		"JvmFormalParameter");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop33;
                        }
                    } while (true);


                    }
                    break;

            }

            otherlv_5=(Token)match(input,52,FOLLOW_52_in_ruleXClosure5869); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getXClosureAccess().getVerticalLineKeyword_3());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2441:1: ( (lv_expression_6_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2442:1: (lv_expression_6_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2442:1: (lv_expression_6_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2443:3: lv_expression_6_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXClosureAccess().getExpressionXExpressionParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXClosure5890);
            lv_expression_6_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXClosureRule());
              	        }
                     		set(
                     			current, 
                     			"expression",
                      		lv_expression_6_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_7=(Token)match(input,25,FOLLOW_25_in_ruleXClosure5902); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_7, grammarAccess.getXClosureAccess().getRightSquareBracketKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXClosure"


    // $ANTLR start "entryRuleXShortClosure"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2471:1: entryRuleXShortClosure returns [EObject current=null] : iv_ruleXShortClosure= ruleXShortClosure EOF ;
    public final EObject entryRuleXShortClosure() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXShortClosure = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2472:2: (iv_ruleXShortClosure= ruleXShortClosure EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2473:2: iv_ruleXShortClosure= ruleXShortClosure EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXShortClosureRule()); 
            }
            pushFollow(FOLLOW_ruleXShortClosure_in_entryRuleXShortClosure5938);
            iv_ruleXShortClosure=ruleXShortClosure();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXShortClosure; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXShortClosure5948); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXShortClosure"


    // $ANTLR start "ruleXShortClosure"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2480:1: ruleXShortClosure returns [EObject current=null] : ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> ( () ( ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )* )? otherlv_4= '|' ) ) ( (lv_expression_5_0= ruleXExpression ) ) ) ;
    public final EObject ruleXShortClosure() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_formalParameters_1_0 = null;

        EObject lv_formalParameters_3_0 = null;

        EObject lv_expression_5_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2483:28: ( ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> ( () ( ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )* )? otherlv_4= '|' ) ) ( (lv_expression_5_0= ruleXExpression ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2484:1: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> ( () ( ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )* )? otherlv_4= '|' ) ) ( (lv_expression_5_0= ruleXExpression ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2484:1: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> ( () ( ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )* )? otherlv_4= '|' ) ) ( (lv_expression_5_0= ruleXExpression ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2484:2: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> ( () ( ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )* )? otherlv_4= '|' ) ) ( (lv_expression_5_0= ruleXExpression ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2484:2: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> ( () ( ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )* )? otherlv_4= '|' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2484:3: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> ( () ( ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )* )? otherlv_4= '|' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2495:5: ( () ( ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )* )? otherlv_4= '|' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2495:6: () ( ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )* )? otherlv_4= '|'
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2495:6: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2496:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXShortClosureAccess().getXClosureAction_0_0_0(),
                          current);
                  
            }

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2501:2: ( ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )* )?
            int alt36=2;
            int LA36_0 = input.LA(1);

            if ( (LA36_0==RULE_ID||LA36_0==50||LA36_0==78) ) {
                alt36=1;
            }
            switch (alt36) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2501:3: ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )*
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2501:3: ( (lv_formalParameters_1_0= ruleJvmFormalParameter ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2502:1: (lv_formalParameters_1_0= ruleJvmFormalParameter )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2502:1: (lv_formalParameters_1_0= ruleJvmFormalParameter )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2503:3: lv_formalParameters_1_0= ruleJvmFormalParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXShortClosureAccess().getFormalParametersJvmFormalParameterParserRuleCall_0_0_1_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleJvmFormalParameter_in_ruleXShortClosure6046);
                    lv_formalParameters_1_0=ruleJvmFormalParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXShortClosureRule());
                      	        }
                             		add(
                             			current, 
                             			"formalParameters",
                              		lv_formalParameters_1_0, 
                              		"JvmFormalParameter");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2519:2: (otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) ) )*
                    loop35:
                    do {
                        int alt35=2;
                        int LA35_0 = input.LA(1);

                        if ( (LA35_0==49) ) {
                            alt35=1;
                        }


                        switch (alt35) {
                    	case 1 :
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2519:4: otherlv_2= ',' ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) )
                    	    {
                    	    otherlv_2=(Token)match(input,49,FOLLOW_49_in_ruleXShortClosure6059); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_2, grammarAccess.getXShortClosureAccess().getCommaKeyword_0_0_1_1_0());
                    	          
                    	    }
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2523:1: ( (lv_formalParameters_3_0= ruleJvmFormalParameter ) )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2524:1: (lv_formalParameters_3_0= ruleJvmFormalParameter )
                    	    {
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2524:1: (lv_formalParameters_3_0= ruleJvmFormalParameter )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2525:3: lv_formalParameters_3_0= ruleJvmFormalParameter
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXShortClosureAccess().getFormalParametersJvmFormalParameterParserRuleCall_0_0_1_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleJvmFormalParameter_in_ruleXShortClosure6080);
                    	    lv_formalParameters_3_0=ruleJvmFormalParameter();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getXShortClosureRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"formalParameters",
                    	              		lv_formalParameters_3_0, 
                    	              		"JvmFormalParameter");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop35;
                        }
                    } while (true);


                    }
                    break;

            }

            otherlv_4=(Token)match(input,52,FOLLOW_52_in_ruleXShortClosure6096); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXShortClosureAccess().getVerticalLineKeyword_0_0_2());
                  
            }

            }


            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2545:3: ( (lv_expression_5_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2546:1: (lv_expression_5_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2546:1: (lv_expression_5_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2547:3: lv_expression_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXShortClosureAccess().getExpressionXExpressionParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXShortClosure6119);
            lv_expression_5_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXShortClosureRule());
              	        }
                     		set(
                     			current, 
                     			"expression",
                      		lv_expression_5_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXShortClosure"


    // $ANTLR start "entryRuleXParenthesizedExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2571:1: entryRuleXParenthesizedExpression returns [EObject current=null] : iv_ruleXParenthesizedExpression= ruleXParenthesizedExpression EOF ;
    public final EObject entryRuleXParenthesizedExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXParenthesizedExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2572:2: (iv_ruleXParenthesizedExpression= ruleXParenthesizedExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2573:2: iv_ruleXParenthesizedExpression= ruleXParenthesizedExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXParenthesizedExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXParenthesizedExpression_in_entryRuleXParenthesizedExpression6155);
            iv_ruleXParenthesizedExpression=ruleXParenthesizedExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXParenthesizedExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXParenthesizedExpression6165); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXParenthesizedExpression"


    // $ANTLR start "ruleXParenthesizedExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2580:1: ruleXParenthesizedExpression returns [EObject current=null] : (otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')' ) ;
    public final EObject ruleXParenthesizedExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject this_XExpression_1 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2583:28: ( (otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2584:1: (otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2584:1: (otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2584:3: otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')'
            {
            otherlv_0=(Token)match(input,50,FOLLOW_50_in_ruleXParenthesizedExpression6202); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0());
                  
            }
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXParenthesizedExpressionAccess().getXExpressionParserRuleCall_1()); 
                  
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXParenthesizedExpression6224);
            this_XExpression_1=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XExpression_1; 
                      afterParserOrEnumRuleCall();
                  
            }
            otherlv_2=(Token)match(input,51,FOLLOW_51_in_ruleXParenthesizedExpression6235); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXParenthesizedExpressionAccess().getRightParenthesisKeyword_2());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXParenthesizedExpression"


    // $ANTLR start "entryRuleXIfExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2609:1: entryRuleXIfExpression returns [EObject current=null] : iv_ruleXIfExpression= ruleXIfExpression EOF ;
    public final EObject entryRuleXIfExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXIfExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2610:2: (iv_ruleXIfExpression= ruleXIfExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2611:2: iv_ruleXIfExpression= ruleXIfExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXIfExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXIfExpression_in_entryRuleXIfExpression6271);
            iv_ruleXIfExpression=ruleXIfExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXIfExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXIfExpression6281); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXIfExpression"


    // $ANTLR start "ruleXIfExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2618:1: ruleXIfExpression returns [EObject current=null] : ( () otherlv_1= 'if' otherlv_2= '(' ( (lv_if_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_then_5_0= ruleXExpression ) ) ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )? ) ;
    public final EObject ruleXIfExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_if_3_0 = null;

        EObject lv_then_5_0 = null;

        EObject lv_else_7_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2621:28: ( ( () otherlv_1= 'if' otherlv_2= '(' ( (lv_if_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_then_5_0= ruleXExpression ) ) ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )? ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2622:1: ( () otherlv_1= 'if' otherlv_2= '(' ( (lv_if_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_then_5_0= ruleXExpression ) ) ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )? )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2622:1: ( () otherlv_1= 'if' otherlv_2= '(' ( (lv_if_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_then_5_0= ruleXExpression ) ) ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )? )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2622:2: () otherlv_1= 'if' otherlv_2= '(' ( (lv_if_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_then_5_0= ruleXExpression ) ) ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )?
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2622:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2623:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXIfExpressionAccess().getXIfExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,53,FOLLOW_53_in_ruleXIfExpression6327); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXIfExpressionAccess().getIfKeyword_1());
                  
            }
            otherlv_2=(Token)match(input,50,FOLLOW_50_in_ruleXIfExpression6339); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXIfExpressionAccess().getLeftParenthesisKeyword_2());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2636:1: ( (lv_if_3_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2637:1: (lv_if_3_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2637:1: (lv_if_3_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2638:3: lv_if_3_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXIfExpressionAccess().getIfXExpressionParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXIfExpression6360);
            lv_if_3_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXIfExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"if",
                      		lv_if_3_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_4=(Token)match(input,51,FOLLOW_51_in_ruleXIfExpression6372); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXIfExpressionAccess().getRightParenthesisKeyword_4());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2658:1: ( (lv_then_5_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2659:1: (lv_then_5_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2659:1: (lv_then_5_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2660:3: lv_then_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXIfExpressionAccess().getThenXExpressionParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXIfExpression6393);
            lv_then_5_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXIfExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"then",
                      		lv_then_5_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2676:2: ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )?
            int alt37=2;
            int LA37_0 = input.LA(1);

            if ( (LA37_0==54) ) {
                int LA37_1 = input.LA(2);

                if ( (synpred16_InternalTalkMe()) ) {
                    alt37=1;
                }
            }
            switch (alt37) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2676:3: ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2676:3: ( ( 'else' )=>otherlv_6= 'else' )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2676:4: ( 'else' )=>otherlv_6= 'else'
                    {
                    otherlv_6=(Token)match(input,54,FOLLOW_54_in_ruleXIfExpression6414); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_6, grammarAccess.getXIfExpressionAccess().getElseKeyword_6_0());
                          
                    }

                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2681:2: ( (lv_else_7_0= ruleXExpression ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2682:1: (lv_else_7_0= ruleXExpression )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2682:1: (lv_else_7_0= ruleXExpression )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2683:3: lv_else_7_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXIfExpressionAccess().getElseXExpressionParserRuleCall_6_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleXExpression_in_ruleXIfExpression6436);
                    lv_else_7_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXIfExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"else",
                              		lv_else_7_0, 
                              		"XExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXIfExpression"


    // $ANTLR start "entryRuleXSwitchExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2707:1: entryRuleXSwitchExpression returns [EObject current=null] : iv_ruleXSwitchExpression= ruleXSwitchExpression EOF ;
    public final EObject entryRuleXSwitchExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXSwitchExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2708:2: (iv_ruleXSwitchExpression= ruleXSwitchExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2709:2: iv_ruleXSwitchExpression= ruleXSwitchExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXSwitchExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXSwitchExpression_in_entryRuleXSwitchExpression6474);
            iv_ruleXSwitchExpression=ruleXSwitchExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXSwitchExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXSwitchExpression6484); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXSwitchExpression"


    // $ANTLR start "ruleXSwitchExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2716:1: ruleXSwitchExpression returns [EObject current=null] : ( () otherlv_1= 'switch' ( ( (lv_localVarName_2_0= ruleValidID ) ) otherlv_3= ':' )? ( (lv_switch_4_0= ruleXExpression ) ) otherlv_5= '{' ( (lv_cases_6_0= ruleXCasePart ) )+ (otherlv_7= 'default' otherlv_8= ':' ( (lv_default_9_0= ruleXExpression ) ) )? otherlv_10= '}' ) ;
    public final EObject ruleXSwitchExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        AntlrDatatypeRuleToken lv_localVarName_2_0 = null;

        EObject lv_switch_4_0 = null;

        EObject lv_cases_6_0 = null;

        EObject lv_default_9_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2719:28: ( ( () otherlv_1= 'switch' ( ( (lv_localVarName_2_0= ruleValidID ) ) otherlv_3= ':' )? ( (lv_switch_4_0= ruleXExpression ) ) otherlv_5= '{' ( (lv_cases_6_0= ruleXCasePart ) )+ (otherlv_7= 'default' otherlv_8= ':' ( (lv_default_9_0= ruleXExpression ) ) )? otherlv_10= '}' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2720:1: ( () otherlv_1= 'switch' ( ( (lv_localVarName_2_0= ruleValidID ) ) otherlv_3= ':' )? ( (lv_switch_4_0= ruleXExpression ) ) otherlv_5= '{' ( (lv_cases_6_0= ruleXCasePart ) )+ (otherlv_7= 'default' otherlv_8= ':' ( (lv_default_9_0= ruleXExpression ) ) )? otherlv_10= '}' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2720:1: ( () otherlv_1= 'switch' ( ( (lv_localVarName_2_0= ruleValidID ) ) otherlv_3= ':' )? ( (lv_switch_4_0= ruleXExpression ) ) otherlv_5= '{' ( (lv_cases_6_0= ruleXCasePart ) )+ (otherlv_7= 'default' otherlv_8= ':' ( (lv_default_9_0= ruleXExpression ) ) )? otherlv_10= '}' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2720:2: () otherlv_1= 'switch' ( ( (lv_localVarName_2_0= ruleValidID ) ) otherlv_3= ':' )? ( (lv_switch_4_0= ruleXExpression ) ) otherlv_5= '{' ( (lv_cases_6_0= ruleXCasePart ) )+ (otherlv_7= 'default' otherlv_8= ':' ( (lv_default_9_0= ruleXExpression ) ) )? otherlv_10= '}'
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2720:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2721:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXSwitchExpressionAccess().getXSwitchExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,55,FOLLOW_55_in_ruleXSwitchExpression6530); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXSwitchExpressionAccess().getSwitchKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2730:1: ( ( (lv_localVarName_2_0= ruleValidID ) ) otherlv_3= ':' )?
            int alt38=2;
            int LA38_0 = input.LA(1);

            if ( (LA38_0==RULE_ID) ) {
                int LA38_1 = input.LA(2);

                if ( (LA38_1==56) ) {
                    alt38=1;
                }
            }
            switch (alt38) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2730:2: ( (lv_localVarName_2_0= ruleValidID ) ) otherlv_3= ':'
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2730:2: ( (lv_localVarName_2_0= ruleValidID ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2731:1: (lv_localVarName_2_0= ruleValidID )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2731:1: (lv_localVarName_2_0= ruleValidID )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2732:3: lv_localVarName_2_0= ruleValidID
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getLocalVarNameValidIDParserRuleCall_2_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleValidID_in_ruleXSwitchExpression6552);
                    lv_localVarName_2_0=ruleValidID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"localVarName",
                              		lv_localVarName_2_0, 
                              		"ValidID");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    otherlv_3=(Token)match(input,56,FOLLOW_56_in_ruleXSwitchExpression6564); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getXSwitchExpressionAccess().getColonKeyword_2_1());
                          
                    }

                    }
                    break;

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2752:3: ( (lv_switch_4_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2753:1: (lv_switch_4_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2753:1: (lv_switch_4_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2754:3: lv_switch_4_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getSwitchXExpressionParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXSwitchExpression6587);
            lv_switch_4_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"switch",
                      		lv_switch_4_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_5=(Token)match(input,57,FOLLOW_57_in_ruleXSwitchExpression6599); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getXSwitchExpressionAccess().getLeftCurlyBracketKeyword_4());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2774:1: ( (lv_cases_6_0= ruleXCasePart ) )+
            int cnt39=0;
            loop39:
            do {
                int alt39=2;
                int LA39_0 = input.LA(1);

                if ( (LA39_0==RULE_ID||LA39_0==50||LA39_0==56||LA39_0==60||LA39_0==78) ) {
                    alt39=1;
                }


                switch (alt39) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2775:1: (lv_cases_6_0= ruleXCasePart )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2775:1: (lv_cases_6_0= ruleXCasePart )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2776:3: lv_cases_6_0= ruleXCasePart
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getCasesXCasePartParserRuleCall_5_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleXCasePart_in_ruleXSwitchExpression6620);
            	    lv_cases_6_0=ruleXCasePart();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"cases",
            	              		lv_cases_6_0, 
            	              		"XCasePart");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt39 >= 1 ) break loop39;
            	    if (state.backtracking>0) {state.failed=true; return current;}
                        EarlyExitException eee =
                            new EarlyExitException(39, input);
                        throw eee;
                }
                cnt39++;
            } while (true);

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2792:3: (otherlv_7= 'default' otherlv_8= ':' ( (lv_default_9_0= ruleXExpression ) ) )?
            int alt40=2;
            int LA40_0 = input.LA(1);

            if ( (LA40_0==58) ) {
                alt40=1;
            }
            switch (alt40) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2792:5: otherlv_7= 'default' otherlv_8= ':' ( (lv_default_9_0= ruleXExpression ) )
                    {
                    otherlv_7=(Token)match(input,58,FOLLOW_58_in_ruleXSwitchExpression6634); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_7, grammarAccess.getXSwitchExpressionAccess().getDefaultKeyword_6_0());
                          
                    }
                    otherlv_8=(Token)match(input,56,FOLLOW_56_in_ruleXSwitchExpression6646); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_8, grammarAccess.getXSwitchExpressionAccess().getColonKeyword_6_1());
                          
                    }
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2800:1: ( (lv_default_9_0= ruleXExpression ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2801:1: (lv_default_9_0= ruleXExpression )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2801:1: (lv_default_9_0= ruleXExpression )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2802:3: lv_default_9_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getDefaultXExpressionParserRuleCall_6_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleXExpression_in_ruleXSwitchExpression6667);
                    lv_default_9_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"default",
                              		lv_default_9_0, 
                              		"XExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_10=(Token)match(input,59,FOLLOW_59_in_ruleXSwitchExpression6681); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_10, grammarAccess.getXSwitchExpressionAccess().getRightCurlyBracketKeyword_7());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXSwitchExpression"


    // $ANTLR start "entryRuleXCasePart"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2830:1: entryRuleXCasePart returns [EObject current=null] : iv_ruleXCasePart= ruleXCasePart EOF ;
    public final EObject entryRuleXCasePart() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXCasePart = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2831:2: (iv_ruleXCasePart= ruleXCasePart EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2832:2: iv_ruleXCasePart= ruleXCasePart EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXCasePartRule()); 
            }
            pushFollow(FOLLOW_ruleXCasePart_in_entryRuleXCasePart6717);
            iv_ruleXCasePart=ruleXCasePart();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXCasePart; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXCasePart6727); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXCasePart"


    // $ANTLR start "ruleXCasePart"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2839:1: ruleXCasePart returns [EObject current=null] : ( ( (lv_typeGuard_0_0= ruleJvmTypeReference ) )? (otherlv_1= 'case' ( (lv_case_2_0= ruleXExpression ) ) )? otherlv_3= ':' ( (lv_then_4_0= ruleXExpression ) ) ) ;
    public final EObject ruleXCasePart() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_typeGuard_0_0 = null;

        EObject lv_case_2_0 = null;

        EObject lv_then_4_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2842:28: ( ( ( (lv_typeGuard_0_0= ruleJvmTypeReference ) )? (otherlv_1= 'case' ( (lv_case_2_0= ruleXExpression ) ) )? otherlv_3= ':' ( (lv_then_4_0= ruleXExpression ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2843:1: ( ( (lv_typeGuard_0_0= ruleJvmTypeReference ) )? (otherlv_1= 'case' ( (lv_case_2_0= ruleXExpression ) ) )? otherlv_3= ':' ( (lv_then_4_0= ruleXExpression ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2843:1: ( ( (lv_typeGuard_0_0= ruleJvmTypeReference ) )? (otherlv_1= 'case' ( (lv_case_2_0= ruleXExpression ) ) )? otherlv_3= ':' ( (lv_then_4_0= ruleXExpression ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2843:2: ( (lv_typeGuard_0_0= ruleJvmTypeReference ) )? (otherlv_1= 'case' ( (lv_case_2_0= ruleXExpression ) ) )? otherlv_3= ':' ( (lv_then_4_0= ruleXExpression ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2843:2: ( (lv_typeGuard_0_0= ruleJvmTypeReference ) )?
            int alt41=2;
            int LA41_0 = input.LA(1);

            if ( (LA41_0==RULE_ID||LA41_0==50||LA41_0==78) ) {
                alt41=1;
            }
            switch (alt41) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2844:1: (lv_typeGuard_0_0= ruleJvmTypeReference )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2844:1: (lv_typeGuard_0_0= ruleJvmTypeReference )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2845:3: lv_typeGuard_0_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXCasePartAccess().getTypeGuardJvmTypeReferenceParserRuleCall_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleJvmTypeReference_in_ruleXCasePart6773);
                    lv_typeGuard_0_0=ruleJvmTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXCasePartRule());
                      	        }
                             		set(
                             			current, 
                             			"typeGuard",
                              		lv_typeGuard_0_0, 
                              		"JvmTypeReference");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2861:3: (otherlv_1= 'case' ( (lv_case_2_0= ruleXExpression ) ) )?
            int alt42=2;
            int LA42_0 = input.LA(1);

            if ( (LA42_0==60) ) {
                alt42=1;
            }
            switch (alt42) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2861:5: otherlv_1= 'case' ( (lv_case_2_0= ruleXExpression ) )
                    {
                    otherlv_1=(Token)match(input,60,FOLLOW_60_in_ruleXCasePart6787); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getXCasePartAccess().getCaseKeyword_1_0());
                          
                    }
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2865:1: ( (lv_case_2_0= ruleXExpression ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2866:1: (lv_case_2_0= ruleXExpression )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2866:1: (lv_case_2_0= ruleXExpression )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2867:3: lv_case_2_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXCasePartAccess().getCaseXExpressionParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleXExpression_in_ruleXCasePart6808);
                    lv_case_2_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXCasePartRule());
                      	        }
                             		set(
                             			current, 
                             			"case",
                              		lv_case_2_0, 
                              		"XExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_3=(Token)match(input,56,FOLLOW_56_in_ruleXCasePart6822); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getXCasePartAccess().getColonKeyword_2());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2887:1: ( (lv_then_4_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2888:1: (lv_then_4_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2888:1: (lv_then_4_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2889:3: lv_then_4_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXCasePartAccess().getThenXExpressionParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXCasePart6843);
            lv_then_4_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXCasePartRule());
              	        }
                     		set(
                     			current, 
                     			"then",
                      		lv_then_4_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXCasePart"


    // $ANTLR start "entryRuleXForLoopExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2913:1: entryRuleXForLoopExpression returns [EObject current=null] : iv_ruleXForLoopExpression= ruleXForLoopExpression EOF ;
    public final EObject entryRuleXForLoopExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXForLoopExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2914:2: (iv_ruleXForLoopExpression= ruleXForLoopExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2915:2: iv_ruleXForLoopExpression= ruleXForLoopExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXForLoopExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXForLoopExpression_in_entryRuleXForLoopExpression6879);
            iv_ruleXForLoopExpression=ruleXForLoopExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXForLoopExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXForLoopExpression6889); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXForLoopExpression"


    // $ANTLR start "ruleXForLoopExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2922:1: ruleXForLoopExpression returns [EObject current=null] : ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ( (lv_forExpression_5_0= ruleXExpression ) ) otherlv_6= ')' ( (lv_eachExpression_7_0= ruleXExpression ) ) ) ;
    public final EObject ruleXForLoopExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_declaredParam_3_0 = null;

        EObject lv_forExpression_5_0 = null;

        EObject lv_eachExpression_7_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2925:28: ( ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ( (lv_forExpression_5_0= ruleXExpression ) ) otherlv_6= ')' ( (lv_eachExpression_7_0= ruleXExpression ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2926:1: ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ( (lv_forExpression_5_0= ruleXExpression ) ) otherlv_6= ')' ( (lv_eachExpression_7_0= ruleXExpression ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2926:1: ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ( (lv_forExpression_5_0= ruleXExpression ) ) otherlv_6= ')' ( (lv_eachExpression_7_0= ruleXExpression ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2926:2: () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ( (lv_forExpression_5_0= ruleXExpression ) ) otherlv_6= ')' ( (lv_eachExpression_7_0= ruleXExpression ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2926:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2927:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXForLoopExpressionAccess().getXForLoopExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,61,FOLLOW_61_in_ruleXForLoopExpression6935); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXForLoopExpressionAccess().getForKeyword_1());
                  
            }
            otherlv_2=(Token)match(input,50,FOLLOW_50_in_ruleXForLoopExpression6947); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXForLoopExpressionAccess().getLeftParenthesisKeyword_2());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2940:1: ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2941:1: (lv_declaredParam_3_0= ruleJvmFormalParameter )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2941:1: (lv_declaredParam_3_0= ruleJvmFormalParameter )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2942:3: lv_declaredParam_3_0= ruleJvmFormalParameter
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleJvmFormalParameter_in_ruleXForLoopExpression6968);
            lv_declaredParam_3_0=ruleJvmFormalParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXForLoopExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"declaredParam",
                      		lv_declaredParam_3_0, 
                      		"JvmFormalParameter");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_4=(Token)match(input,56,FOLLOW_56_in_ruleXForLoopExpression6980); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXForLoopExpressionAccess().getColonKeyword_4());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2962:1: ( (lv_forExpression_5_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2963:1: (lv_forExpression_5_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2963:1: (lv_forExpression_5_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2964:3: lv_forExpression_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getForExpressionXExpressionParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXForLoopExpression7001);
            lv_forExpression_5_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXForLoopExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"forExpression",
                      		lv_forExpression_5_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_6=(Token)match(input,51,FOLLOW_51_in_ruleXForLoopExpression7013); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getXForLoopExpressionAccess().getRightParenthesisKeyword_6());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2984:1: ( (lv_eachExpression_7_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2985:1: (lv_eachExpression_7_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2985:1: (lv_eachExpression_7_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2986:3: lv_eachExpression_7_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_7_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXForLoopExpression7034);
            lv_eachExpression_7_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXForLoopExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"eachExpression",
                      		lv_eachExpression_7_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXForLoopExpression"


    // $ANTLR start "entryRuleXWhileExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3010:1: entryRuleXWhileExpression returns [EObject current=null] : iv_ruleXWhileExpression= ruleXWhileExpression EOF ;
    public final EObject entryRuleXWhileExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXWhileExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3011:2: (iv_ruleXWhileExpression= ruleXWhileExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3012:2: iv_ruleXWhileExpression= ruleXWhileExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXWhileExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXWhileExpression_in_entryRuleXWhileExpression7070);
            iv_ruleXWhileExpression=ruleXWhileExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXWhileExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXWhileExpression7080); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXWhileExpression"


    // $ANTLR start "ruleXWhileExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3019:1: ruleXWhileExpression returns [EObject current=null] : ( () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) ) ) ;
    public final EObject ruleXWhileExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_predicate_3_0 = null;

        EObject lv_body_5_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3022:28: ( ( () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3023:1: ( () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3023:1: ( () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3023:2: () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3023:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3024:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXWhileExpressionAccess().getXWhileExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,62,FOLLOW_62_in_ruleXWhileExpression7126); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXWhileExpressionAccess().getWhileKeyword_1());
                  
            }
            otherlv_2=(Token)match(input,50,FOLLOW_50_in_ruleXWhileExpression7138); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXWhileExpressionAccess().getLeftParenthesisKeyword_2());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3037:1: ( (lv_predicate_3_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3038:1: (lv_predicate_3_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3038:1: (lv_predicate_3_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3039:3: lv_predicate_3_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXWhileExpressionAccess().getPredicateXExpressionParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXWhileExpression7159);
            lv_predicate_3_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXWhileExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"predicate",
                      		lv_predicate_3_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_4=(Token)match(input,51,FOLLOW_51_in_ruleXWhileExpression7171); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXWhileExpressionAccess().getRightParenthesisKeyword_4());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3059:1: ( (lv_body_5_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3060:1: (lv_body_5_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3060:1: (lv_body_5_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3061:3: lv_body_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXWhileExpressionAccess().getBodyXExpressionParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXWhileExpression7192);
            lv_body_5_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXWhileExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"body",
                      		lv_body_5_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXWhileExpression"


    // $ANTLR start "entryRuleXDoWhileExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3085:1: entryRuleXDoWhileExpression returns [EObject current=null] : iv_ruleXDoWhileExpression= ruleXDoWhileExpression EOF ;
    public final EObject entryRuleXDoWhileExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXDoWhileExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3086:2: (iv_ruleXDoWhileExpression= ruleXDoWhileExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3087:2: iv_ruleXDoWhileExpression= ruleXDoWhileExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXDoWhileExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXDoWhileExpression_in_entryRuleXDoWhileExpression7228);
            iv_ruleXDoWhileExpression=ruleXDoWhileExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXDoWhileExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXDoWhileExpression7238); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXDoWhileExpression"


    // $ANTLR start "ruleXDoWhileExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3094:1: ruleXDoWhileExpression returns [EObject current=null] : ( () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')' ) ;
    public final EObject ruleXDoWhileExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_body_2_0 = null;

        EObject lv_predicate_5_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3097:28: ( ( () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3098:1: ( () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3098:1: ( () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3098:2: () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')'
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3098:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3099:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXDoWhileExpressionAccess().getXDoWhileExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,63,FOLLOW_63_in_ruleXDoWhileExpression7284); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXDoWhileExpressionAccess().getDoKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3108:1: ( (lv_body_2_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3109:1: (lv_body_2_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3109:1: (lv_body_2_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3110:3: lv_body_2_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXDoWhileExpressionAccess().getBodyXExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXDoWhileExpression7305);
            lv_body_2_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXDoWhileExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"body",
                      		lv_body_2_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,62,FOLLOW_62_in_ruleXDoWhileExpression7317); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getXDoWhileExpressionAccess().getWhileKeyword_3());
                  
            }
            otherlv_4=(Token)match(input,50,FOLLOW_50_in_ruleXDoWhileExpression7329); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXDoWhileExpressionAccess().getLeftParenthesisKeyword_4());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3134:1: ( (lv_predicate_5_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3135:1: (lv_predicate_5_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3135:1: (lv_predicate_5_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3136:3: lv_predicate_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXDoWhileExpressionAccess().getPredicateXExpressionParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXDoWhileExpression7350);
            lv_predicate_5_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXDoWhileExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"predicate",
                      		lv_predicate_5_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_6=(Token)match(input,51,FOLLOW_51_in_ruleXDoWhileExpression7362); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getXDoWhileExpressionAccess().getRightParenthesisKeyword_6());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXDoWhileExpression"


    // $ANTLR start "entryRuleXBlockExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3164:1: entryRuleXBlockExpression returns [EObject current=null] : iv_ruleXBlockExpression= ruleXBlockExpression EOF ;
    public final EObject entryRuleXBlockExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXBlockExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3165:2: (iv_ruleXBlockExpression= ruleXBlockExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3166:2: iv_ruleXBlockExpression= ruleXBlockExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXBlockExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXBlockExpression_in_entryRuleXBlockExpression7398);
            iv_ruleXBlockExpression=ruleXBlockExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXBlockExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXBlockExpression7408); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXBlockExpression"


    // $ANTLR start "ruleXBlockExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3173:1: ruleXBlockExpression returns [EObject current=null] : ( () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionInsideBlock ) ) (otherlv_3= ';' )? )* otherlv_4= '}' ) ;
    public final EObject ruleXBlockExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        EObject lv_expressions_2_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3176:28: ( ( () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionInsideBlock ) ) (otherlv_3= ';' )? )* otherlv_4= '}' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3177:1: ( () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionInsideBlock ) ) (otherlv_3= ';' )? )* otherlv_4= '}' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3177:1: ( () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionInsideBlock ) ) (otherlv_3= ';' )? )* otherlv_4= '}' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3177:2: () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionInsideBlock ) ) (otherlv_3= ';' )? )* otherlv_4= '}'
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3177:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3178:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXBlockExpressionAccess().getXBlockExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,57,FOLLOW_57_in_ruleXBlockExpression7454); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXBlockExpressionAccess().getLeftCurlyBracketKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3187:1: ( ( (lv_expressions_2_0= ruleXExpressionInsideBlock ) ) (otherlv_3= ';' )? )*
            loop44:
            do {
                int alt44=2;
                int LA44_0 = input.LA(1);

                if ( ((LA44_0>=RULE_ID && LA44_0<=RULE_INT)||LA44_0==22||LA44_0==35||(LA44_0>=38 && LA44_0<=39)||LA44_0==44||LA44_0==50||LA44_0==53||LA44_0==55||LA44_0==57||(LA44_0>=61 && LA44_0<=66)||(LA44_0>=68 && LA44_0<=75)) ) {
                    alt44=1;
                }


                switch (alt44) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3187:2: ( (lv_expressions_2_0= ruleXExpressionInsideBlock ) ) (otherlv_3= ';' )?
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3187:2: ( (lv_expressions_2_0= ruleXExpressionInsideBlock ) )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3188:1: (lv_expressions_2_0= ruleXExpressionInsideBlock )
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3188:1: (lv_expressions_2_0= ruleXExpressionInsideBlock )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3189:3: lv_expressions_2_0= ruleXExpressionInsideBlock
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXBlockExpressionAccess().getExpressionsXExpressionInsideBlockParserRuleCall_2_0_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleXExpressionInsideBlock_in_ruleXBlockExpression7476);
            	    lv_expressions_2_0=ruleXExpressionInsideBlock();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getXBlockExpressionRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"expressions",
            	              		lv_expressions_2_0, 
            	              		"XExpressionInsideBlock");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }

            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3205:2: (otherlv_3= ';' )?
            	    int alt43=2;
            	    int LA43_0 = input.LA(1);

            	    if ( (LA43_0==12) ) {
            	        alt43=1;
            	    }
            	    switch (alt43) {
            	        case 1 :
            	            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3205:4: otherlv_3= ';'
            	            {
            	            otherlv_3=(Token)match(input,12,FOLLOW_12_in_ruleXBlockExpression7489); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_3, grammarAccess.getXBlockExpressionAccess().getSemicolonKeyword_2_1());
            	                  
            	            }

            	            }
            	            break;

            	    }


            	    }
            	    break;

            	default :
            	    break loop44;
                }
            } while (true);

            otherlv_4=(Token)match(input,59,FOLLOW_59_in_ruleXBlockExpression7505); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXBlockExpressionAccess().getRightCurlyBracketKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXBlockExpression"


    // $ANTLR start "entryRuleXExpressionInsideBlock"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3221:1: entryRuleXExpressionInsideBlock returns [EObject current=null] : iv_ruleXExpressionInsideBlock= ruleXExpressionInsideBlock EOF ;
    public final EObject entryRuleXExpressionInsideBlock() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXExpressionInsideBlock = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3222:2: (iv_ruleXExpressionInsideBlock= ruleXExpressionInsideBlock EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3223:2: iv_ruleXExpressionInsideBlock= ruleXExpressionInsideBlock EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXExpressionInsideBlockRule()); 
            }
            pushFollow(FOLLOW_ruleXExpressionInsideBlock_in_entryRuleXExpressionInsideBlock7541);
            iv_ruleXExpressionInsideBlock=ruleXExpressionInsideBlock();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXExpressionInsideBlock; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXExpressionInsideBlock7551); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXExpressionInsideBlock"


    // $ANTLR start "ruleXExpressionInsideBlock"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3230:1: ruleXExpressionInsideBlock returns [EObject current=null] : (this_XVariableDeclaration_0= ruleXVariableDeclaration | this_XExpression_1= ruleXExpression ) ;
    public final EObject ruleXExpressionInsideBlock() throws RecognitionException {
        EObject current = null;

        EObject this_XVariableDeclaration_0 = null;

        EObject this_XExpression_1 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3233:28: ( (this_XVariableDeclaration_0= ruleXVariableDeclaration | this_XExpression_1= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3234:1: (this_XVariableDeclaration_0= ruleXVariableDeclaration | this_XExpression_1= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3234:1: (this_XVariableDeclaration_0= ruleXVariableDeclaration | this_XExpression_1= ruleXExpression )
            int alt45=2;
            int LA45_0 = input.LA(1);

            if ( ((LA45_0>=64 && LA45_0<=65)) ) {
                alt45=1;
            }
            else if ( ((LA45_0>=RULE_ID && LA45_0<=RULE_INT)||LA45_0==22||LA45_0==35||(LA45_0>=38 && LA45_0<=39)||LA45_0==44||LA45_0==50||LA45_0==53||LA45_0==55||LA45_0==57||(LA45_0>=61 && LA45_0<=63)||LA45_0==66||(LA45_0>=68 && LA45_0<=75)) ) {
                alt45=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 45, 0, input);

                throw nvae;
            }
            switch (alt45) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3235:5: this_XVariableDeclaration_0= ruleXVariableDeclaration
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXExpressionInsideBlockAccess().getXVariableDeclarationParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXVariableDeclaration_in_ruleXExpressionInsideBlock7598);
                    this_XVariableDeclaration_0=ruleXVariableDeclaration();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XVariableDeclaration_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3245:5: this_XExpression_1= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXExpressionInsideBlockAccess().getXExpressionParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXExpression_in_ruleXExpressionInsideBlock7625);
                    this_XExpression_1=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XExpression_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXExpressionInsideBlock"


    // $ANTLR start "entryRuleXVariableDeclaration"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3261:1: entryRuleXVariableDeclaration returns [EObject current=null] : iv_ruleXVariableDeclaration= ruleXVariableDeclaration EOF ;
    public final EObject entryRuleXVariableDeclaration() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXVariableDeclaration = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3262:2: (iv_ruleXVariableDeclaration= ruleXVariableDeclaration EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3263:2: iv_ruleXVariableDeclaration= ruleXVariableDeclaration EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXVariableDeclarationRule()); 
            }
            pushFollow(FOLLOW_ruleXVariableDeclaration_in_entryRuleXVariableDeclaration7660);
            iv_ruleXVariableDeclaration=ruleXVariableDeclaration();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXVariableDeclaration; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXVariableDeclaration7670); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXVariableDeclaration"


    // $ANTLR start "ruleXVariableDeclaration"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3270:1: ruleXVariableDeclaration returns [EObject current=null] : ( () ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) ) (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )? ) ;
    public final EObject ruleXVariableDeclaration() throws RecognitionException {
        EObject current = null;

        Token lv_writeable_1_0=null;
        Token otherlv_2=null;
        Token otherlv_6=null;
        EObject lv_type_3_0 = null;

        AntlrDatatypeRuleToken lv_name_4_0 = null;

        AntlrDatatypeRuleToken lv_name_5_0 = null;

        EObject lv_right_7_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3273:28: ( ( () ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) ) (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )? ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3274:1: ( () ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) ) (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )? )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3274:1: ( () ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) ) (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )? )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3274:2: () ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) ) (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )?
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3274:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3275:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXVariableDeclarationAccess().getXVariableDeclarationAction_0(),
                          current);
                  
            }

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3280:2: ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' )
            int alt46=2;
            int LA46_0 = input.LA(1);

            if ( (LA46_0==64) ) {
                alt46=1;
            }
            else if ( (LA46_0==65) ) {
                alt46=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 46, 0, input);

                throw nvae;
            }
            switch (alt46) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3280:3: ( (lv_writeable_1_0= 'var' ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3280:3: ( (lv_writeable_1_0= 'var' ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3281:1: (lv_writeable_1_0= 'var' )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3281:1: (lv_writeable_1_0= 'var' )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3282:3: lv_writeable_1_0= 'var'
                    {
                    lv_writeable_1_0=(Token)match(input,64,FOLLOW_64_in_ruleXVariableDeclaration7723); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_writeable_1_0, grammarAccess.getXVariableDeclarationAccess().getWriteableVarKeyword_1_0_0());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getXVariableDeclarationRule());
                      	        }
                             		setWithLastConsumed(current, "writeable", true, "var");
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3296:7: otherlv_2= 'val'
                    {
                    otherlv_2=(Token)match(input,65,FOLLOW_65_in_ruleXVariableDeclaration7754); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_2, grammarAccess.getXVariableDeclarationAccess().getValKeyword_1_1());
                          
                    }

                    }
                    break;

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3300:2: ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) )
            int alt47=2;
            int LA47_0 = input.LA(1);

            if ( (LA47_0==RULE_ID) ) {
                int LA47_1 = input.LA(2);

                if ( (synpred17_InternalTalkMe()) ) {
                    alt47=1;
                }
                else if ( (true) ) {
                    alt47=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 47, 1, input);

                    throw nvae;
                }
            }
            else if ( (LA47_0==50) && (synpred17_InternalTalkMe())) {
                alt47=1;
            }
            else if ( (LA47_0==78) && (synpred17_InternalTalkMe())) {
                alt47=1;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 47, 0, input);

                throw nvae;
            }
            switch (alt47) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3300:3: ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3300:3: ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3300:4: ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3308:6: ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3308:7: ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3308:7: ( (lv_type_3_0= ruleJvmTypeReference ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3309:1: (lv_type_3_0= ruleJvmTypeReference )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3309:1: (lv_type_3_0= ruleJvmTypeReference )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3310:3: lv_type_3_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getTypeJvmTypeReferenceParserRuleCall_2_0_0_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleJvmTypeReference_in_ruleXVariableDeclaration7802);
                    lv_type_3_0=ruleJvmTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
                      	        }
                             		set(
                             			current, 
                             			"type",
                              		lv_type_3_0, 
                              		"JvmTypeReference");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3326:2: ( (lv_name_4_0= ruleValidID ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3327:1: (lv_name_4_0= ruleValidID )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3327:1: (lv_name_4_0= ruleValidID )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3328:3: lv_name_4_0= ruleValidID
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_0_0_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleValidID_in_ruleXVariableDeclaration7823);
                    lv_name_4_0=ruleValidID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
                      	        }
                             		set(
                             			current, 
                             			"name",
                              		lv_name_4_0, 
                              		"ValidID");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3345:6: ( (lv_name_5_0= ruleValidID ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3345:6: ( (lv_name_5_0= ruleValidID ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3346:1: (lv_name_5_0= ruleValidID )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3346:1: (lv_name_5_0= ruleValidID )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3347:3: lv_name_5_0= ruleValidID
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleValidID_in_ruleXVariableDeclaration7852);
                    lv_name_5_0=ruleValidID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
                      	        }
                             		set(
                             			current, 
                             			"name",
                              		lv_name_5_0, 
                              		"ValidID");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3363:3: (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )?
            int alt48=2;
            int LA48_0 = input.LA(1);

            if ( (LA48_0==21) ) {
                alt48=1;
            }
            switch (alt48) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3363:5: otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) )
                    {
                    otherlv_6=(Token)match(input,21,FOLLOW_21_in_ruleXVariableDeclaration7866); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_6, grammarAccess.getXVariableDeclarationAccess().getEqualsSignKeyword_3_0());
                          
                    }
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3367:1: ( (lv_right_7_0= ruleXExpression ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3368:1: (lv_right_7_0= ruleXExpression )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3368:1: (lv_right_7_0= ruleXExpression )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3369:3: lv_right_7_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getRightXExpressionParserRuleCall_3_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleXExpression_in_ruleXVariableDeclaration7887);
                    lv_right_7_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
                      	        }
                             		set(
                             			current, 
                             			"right",
                              		lv_right_7_0, 
                              		"XExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXVariableDeclaration"


    // $ANTLR start "entryRuleJvmFormalParameter"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3393:1: entryRuleJvmFormalParameter returns [EObject current=null] : iv_ruleJvmFormalParameter= ruleJvmFormalParameter EOF ;
    public final EObject entryRuleJvmFormalParameter() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmFormalParameter = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3394:2: (iv_ruleJvmFormalParameter= ruleJvmFormalParameter EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3395:2: iv_ruleJvmFormalParameter= ruleJvmFormalParameter EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmFormalParameterRule()); 
            }
            pushFollow(FOLLOW_ruleJvmFormalParameter_in_entryRuleJvmFormalParameter7925);
            iv_ruleJvmFormalParameter=ruleJvmFormalParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmFormalParameter; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleJvmFormalParameter7935); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmFormalParameter"


    // $ANTLR start "ruleJvmFormalParameter"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3402:1: ruleJvmFormalParameter returns [EObject current=null] : ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) ) ) ;
    public final EObject ruleJvmFormalParameter() throws RecognitionException {
        EObject current = null;

        EObject lv_parameterType_0_0 = null;

        AntlrDatatypeRuleToken lv_name_1_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3405:28: ( ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3406:1: ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3406:1: ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3406:2: ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3406:2: ( (lv_parameterType_0_0= ruleJvmTypeReference ) )?
            int alt49=2;
            int LA49_0 = input.LA(1);

            if ( (LA49_0==RULE_ID) ) {
                int LA49_1 = input.LA(2);

                if ( (LA49_1==RULE_ID||LA49_1==35||LA49_1==46) ) {
                    alt49=1;
                }
            }
            else if ( (LA49_0==50||LA49_0==78) ) {
                alt49=1;
            }
            switch (alt49) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3407:1: (lv_parameterType_0_0= ruleJvmTypeReference )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3407:1: (lv_parameterType_0_0= ruleJvmTypeReference )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3408:3: lv_parameterType_0_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleJvmTypeReference_in_ruleJvmFormalParameter7981);
                    lv_parameterType_0_0=ruleJvmTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getJvmFormalParameterRule());
                      	        }
                             		set(
                             			current, 
                             			"parameterType",
                              		lv_parameterType_0_0, 
                              		"JvmTypeReference");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3424:3: ( (lv_name_1_0= ruleValidID ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3425:1: (lv_name_1_0= ruleValidID )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3425:1: (lv_name_1_0= ruleValidID )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3426:3: lv_name_1_0= ruleValidID
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleValidID_in_ruleJvmFormalParameter8003);
            lv_name_1_0=ruleValidID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getJvmFormalParameterRule());
              	        }
                     		set(
                     			current, 
                     			"name",
                      		lv_name_1_0, 
                      		"ValidID");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmFormalParameter"


    // $ANTLR start "entryRuleXFeatureCall"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3450:1: entryRuleXFeatureCall returns [EObject current=null] : iv_ruleXFeatureCall= ruleXFeatureCall EOF ;
    public final EObject entryRuleXFeatureCall() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXFeatureCall = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3451:2: (iv_ruleXFeatureCall= ruleXFeatureCall EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3452:2: iv_ruleXFeatureCall= ruleXFeatureCall EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXFeatureCallRule()); 
            }
            pushFollow(FOLLOW_ruleXFeatureCall_in_entryRuleXFeatureCall8039);
            iv_ruleXFeatureCall=ruleXFeatureCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXFeatureCall; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXFeatureCall8049); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXFeatureCall"


    // $ANTLR start "ruleXFeatureCall"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3459:1: ruleXFeatureCall returns [EObject current=null] : ( () ( ( ruleStaticQualifier ) )? (otherlv_2= '<' ( (lv_typeArguments_3_0= ruleJvmArgumentTypeReference ) ) (otherlv_4= ',' ( (lv_typeArguments_5_0= ruleJvmArgumentTypeReference ) ) )* otherlv_6= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? ) ;
    public final EObject ruleXFeatureCall() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token lv_explicitOperationCall_8_0=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        EObject lv_typeArguments_3_0 = null;

        EObject lv_typeArguments_5_0 = null;

        EObject lv_featureCallArguments_9_0 = null;

        EObject lv_featureCallArguments_10_0 = null;

        EObject lv_featureCallArguments_12_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3462:28: ( ( () ( ( ruleStaticQualifier ) )? (otherlv_2= '<' ( (lv_typeArguments_3_0= ruleJvmArgumentTypeReference ) ) (otherlv_4= ',' ( (lv_typeArguments_5_0= ruleJvmArgumentTypeReference ) ) )* otherlv_6= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3463:1: ( () ( ( ruleStaticQualifier ) )? (otherlv_2= '<' ( (lv_typeArguments_3_0= ruleJvmArgumentTypeReference ) ) (otherlv_4= ',' ( (lv_typeArguments_5_0= ruleJvmArgumentTypeReference ) ) )* otherlv_6= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3463:1: ( () ( ( ruleStaticQualifier ) )? (otherlv_2= '<' ( (lv_typeArguments_3_0= ruleJvmArgumentTypeReference ) ) (otherlv_4= ',' ( (lv_typeArguments_5_0= ruleJvmArgumentTypeReference ) ) )* otherlv_6= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3463:2: () ( ( ruleStaticQualifier ) )? (otherlv_2= '<' ( (lv_typeArguments_3_0= ruleJvmArgumentTypeReference ) ) (otherlv_4= ',' ( (lv_typeArguments_5_0= ruleJvmArgumentTypeReference ) ) )* otherlv_6= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )?
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3463:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3464:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXFeatureCallAccess().getXFeatureCallAction_0(),
                          current);
                  
            }

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3469:2: ( ( ruleStaticQualifier ) )?
            int alt50=2;
            int LA50_0 = input.LA(1);

            if ( (LA50_0==RULE_ID) ) {
                int LA50_1 = input.LA(2);

                if ( (LA50_1==67) ) {
                    alt50=1;
                }
            }
            switch (alt50) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3470:1: ( ruleStaticQualifier )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3470:1: ( ruleStaticQualifier )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3471:3: ruleStaticQualifier
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getXFeatureCallRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getDeclaringTypeJvmDeclaredTypeCrossReference_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleStaticQualifier_in_ruleXFeatureCall8106);
                    ruleStaticQualifier();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3484:3: (otherlv_2= '<' ( (lv_typeArguments_3_0= ruleJvmArgumentTypeReference ) ) (otherlv_4= ',' ( (lv_typeArguments_5_0= ruleJvmArgumentTypeReference ) ) )* otherlv_6= '>' )?
            int alt52=2;
            int LA52_0 = input.LA(1);

            if ( (LA52_0==35) ) {
                alt52=1;
            }
            switch (alt52) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3484:5: otherlv_2= '<' ( (lv_typeArguments_3_0= ruleJvmArgumentTypeReference ) ) (otherlv_4= ',' ( (lv_typeArguments_5_0= ruleJvmArgumentTypeReference ) ) )* otherlv_6= '>'
                    {
                    otherlv_2=(Token)match(input,35,FOLLOW_35_in_ruleXFeatureCall8120); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_2, grammarAccess.getXFeatureCallAccess().getLessThanSignKeyword_2_0());
                          
                    }
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3488:1: ( (lv_typeArguments_3_0= ruleJvmArgumentTypeReference ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3489:1: (lv_typeArguments_3_0= ruleJvmArgumentTypeReference )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3489:1: (lv_typeArguments_3_0= ruleJvmArgumentTypeReference )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3490:3: lv_typeArguments_3_0= ruleJvmArgumentTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_2_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleJvmArgumentTypeReference_in_ruleXFeatureCall8141);
                    lv_typeArguments_3_0=ruleJvmArgumentTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
                      	        }
                             		add(
                             			current, 
                             			"typeArguments",
                              		lv_typeArguments_3_0, 
                              		"JvmArgumentTypeReference");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3506:2: (otherlv_4= ',' ( (lv_typeArguments_5_0= ruleJvmArgumentTypeReference ) ) )*
                    loop51:
                    do {
                        int alt51=2;
                        int LA51_0 = input.LA(1);

                        if ( (LA51_0==49) ) {
                            alt51=1;
                        }


                        switch (alt51) {
                    	case 1 :
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3506:4: otherlv_4= ',' ( (lv_typeArguments_5_0= ruleJvmArgumentTypeReference ) )
                    	    {
                    	    otherlv_4=(Token)match(input,49,FOLLOW_49_in_ruleXFeatureCall8154); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_4, grammarAccess.getXFeatureCallAccess().getCommaKeyword_2_2_0());
                    	          
                    	    }
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3510:1: ( (lv_typeArguments_5_0= ruleJvmArgumentTypeReference ) )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3511:1: (lv_typeArguments_5_0= ruleJvmArgumentTypeReference )
                    	    {
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3511:1: (lv_typeArguments_5_0= ruleJvmArgumentTypeReference )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3512:3: lv_typeArguments_5_0= ruleJvmArgumentTypeReference
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_2_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleJvmArgumentTypeReference_in_ruleXFeatureCall8175);
                    	    lv_typeArguments_5_0=ruleJvmArgumentTypeReference();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"typeArguments",
                    	              		lv_typeArguments_5_0, 
                    	              		"JvmArgumentTypeReference");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop51;
                        }
                    } while (true);

                    otherlv_6=(Token)match(input,34,FOLLOW_34_in_ruleXFeatureCall8189); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_6, grammarAccess.getXFeatureCallAccess().getGreaterThanSignKeyword_2_3());
                          
                    }

                    }
                    break;

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3532:3: ( ( ruleIdOrSuper ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3533:1: ( ruleIdOrSuper )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3533:1: ( ruleIdOrSuper )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3534:3: ruleIdOrSuper
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getXFeatureCallRule());
              	        }
                      
            }
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleIdOrSuper_in_ruleXFeatureCall8214);
            ruleIdOrSuper();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3547:2: ( ( ( ( '(' ) )=> (lv_explicitOperationCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )?
            int alt55=2;
            alt55 = dfa55.predict(input);
            switch (alt55) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3547:3: ( ( ( '(' ) )=> (lv_explicitOperationCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')'
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3547:3: ( ( ( '(' ) )=> (lv_explicitOperationCall_8_0= '(' ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3547:4: ( ( '(' ) )=> (lv_explicitOperationCall_8_0= '(' )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3554:1: (lv_explicitOperationCall_8_0= '(' )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3555:3: lv_explicitOperationCall_8_0= '('
                    {
                    lv_explicitOperationCall_8_0=(Token)match(input,50,FOLLOW_50_in_ruleXFeatureCall8248); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_explicitOperationCall_8_0, grammarAccess.getXFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_4_0_0());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getXFeatureCallRule());
                      	        }
                             		setWithLastConsumed(current, "explicitOperationCall", true, "(");
                      	    
                    }

                    }


                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3568:2: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* ) )?
                    int alt54=3;
                    alt54 = dfa54.predict(input);
                    switch (alt54) {
                        case 1 :
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3568:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) )
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3568:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3568:4: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure )
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3580:1: (lv_featureCallArguments_9_0= ruleXShortClosure )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3581:3: lv_featureCallArguments_9_0= ruleXShortClosure
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXShortClosureParserRuleCall_4_1_0_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleXShortClosure_in_ruleXFeatureCall8323);
                            lv_featureCallArguments_9_0=ruleXShortClosure();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
                              	        }
                                     		add(
                                     			current, 
                                     			"featureCallArguments",
                                      		lv_featureCallArguments_9_0, 
                                      		"XShortClosure");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3598:6: ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* )
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3598:6: ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3598:7: ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )*
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3598:7: ( (lv_featureCallArguments_10_0= ruleXExpression ) )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3599:1: (lv_featureCallArguments_10_0= ruleXExpression )
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3599:1: (lv_featureCallArguments_10_0= ruleXExpression )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3600:3: lv_featureCallArguments_10_0= ruleXExpression
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_4_1_1_0_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleXExpression_in_ruleXFeatureCall8351);
                            lv_featureCallArguments_10_0=ruleXExpression();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
                              	        }
                                     		add(
                                     			current, 
                                     			"featureCallArguments",
                                      		lv_featureCallArguments_10_0, 
                                      		"XExpression");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }

                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3616:2: (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )*
                            loop53:
                            do {
                                int alt53=2;
                                int LA53_0 = input.LA(1);

                                if ( (LA53_0==49) ) {
                                    alt53=1;
                                }


                                switch (alt53) {
                            	case 1 :
                            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3616:4: otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) )
                            	    {
                            	    otherlv_11=(Token)match(input,49,FOLLOW_49_in_ruleXFeatureCall8364); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	          	newLeafNode(otherlv_11, grammarAccess.getXFeatureCallAccess().getCommaKeyword_4_1_1_1_0());
                            	          
                            	    }
                            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3620:1: ( (lv_featureCallArguments_12_0= ruleXExpression ) )
                            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3621:1: (lv_featureCallArguments_12_0= ruleXExpression )
                            	    {
                            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3621:1: (lv_featureCallArguments_12_0= ruleXExpression )
                            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3622:3: lv_featureCallArguments_12_0= ruleXExpression
                            	    {
                            	    if ( state.backtracking==0 ) {
                            	       
                            	      	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_4_1_1_1_1_0()); 
                            	      	    
                            	    }
                            	    pushFollow(FOLLOW_ruleXExpression_in_ruleXFeatureCall8385);
                            	    lv_featureCallArguments_12_0=ruleXExpression();

                            	    state._fsp--;
                            	    if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      	        if (current==null) {
                            	      	            current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
                            	      	        }
                            	             		add(
                            	             			current, 
                            	             			"featureCallArguments",
                            	              		lv_featureCallArguments_12_0, 
                            	              		"XExpression");
                            	      	        afterParserOrEnumRuleCall();
                            	      	    
                            	    }

                            	    }


                            	    }


                            	    }
                            	    break;

                            	default :
                            	    break loop53;
                                }
                            } while (true);


                            }


                            }
                            break;

                    }

                    otherlv_13=(Token)match(input,51,FOLLOW_51_in_ruleXFeatureCall8402); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_13, grammarAccess.getXFeatureCallAccess().getRightParenthesisKeyword_4_2());
                          
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXFeatureCall"


    // $ANTLR start "entryRuleIdOrSuper"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3650:1: entryRuleIdOrSuper returns [String current=null] : iv_ruleIdOrSuper= ruleIdOrSuper EOF ;
    public final String entryRuleIdOrSuper() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleIdOrSuper = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3651:2: (iv_ruleIdOrSuper= ruleIdOrSuper EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3652:2: iv_ruleIdOrSuper= ruleIdOrSuper EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getIdOrSuperRule()); 
            }
            pushFollow(FOLLOW_ruleIdOrSuper_in_entryRuleIdOrSuper8441);
            iv_ruleIdOrSuper=ruleIdOrSuper();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleIdOrSuper.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleIdOrSuper8452); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleIdOrSuper"


    // $ANTLR start "ruleIdOrSuper"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3659:1: ruleIdOrSuper returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ValidID_0= ruleValidID | kw= 'super' ) ;
    public final AntlrDatatypeRuleToken ruleIdOrSuper() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_ValidID_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3662:28: ( (this_ValidID_0= ruleValidID | kw= 'super' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3663:1: (this_ValidID_0= ruleValidID | kw= 'super' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3663:1: (this_ValidID_0= ruleValidID | kw= 'super' )
            int alt56=2;
            int LA56_0 = input.LA(1);

            if ( (LA56_0==RULE_ID) ) {
                alt56=1;
            }
            else if ( (LA56_0==66) ) {
                alt56=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 56, 0, input);

                throw nvae;
            }
            switch (alt56) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3664:5: this_ValidID_0= ruleValidID
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getIdOrSuperAccess().getValidIDParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleValidID_in_ruleIdOrSuper8499);
                    this_ValidID_0=ruleValidID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      		current.merge(this_ValidID_0);
                          
                    }
                    if ( state.backtracking==0 ) {
                       
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3676:2: kw= 'super'
                    {
                    kw=(Token)match(input,66,FOLLOW_66_in_ruleIdOrSuper8523); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getIdOrSuperAccess().getSuperKeyword_1()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleIdOrSuper"


    // $ANTLR start "entryRuleStaticQualifier"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3689:1: entryRuleStaticQualifier returns [String current=null] : iv_ruleStaticQualifier= ruleStaticQualifier EOF ;
    public final String entryRuleStaticQualifier() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleStaticQualifier = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3690:2: (iv_ruleStaticQualifier= ruleStaticQualifier EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3691:2: iv_ruleStaticQualifier= ruleStaticQualifier EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getStaticQualifierRule()); 
            }
            pushFollow(FOLLOW_ruleStaticQualifier_in_entryRuleStaticQualifier8564);
            iv_ruleStaticQualifier=ruleStaticQualifier();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleStaticQualifier.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleStaticQualifier8575); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleStaticQualifier"


    // $ANTLR start "ruleStaticQualifier"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3698:1: ruleStaticQualifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ValidID_0= ruleValidID kw= '::' )+ ;
    public final AntlrDatatypeRuleToken ruleStaticQualifier() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_ValidID_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3701:28: ( (this_ValidID_0= ruleValidID kw= '::' )+ )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3702:1: (this_ValidID_0= ruleValidID kw= '::' )+
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3702:1: (this_ValidID_0= ruleValidID kw= '::' )+
            int cnt57=0;
            loop57:
            do {
                int alt57=2;
                int LA57_0 = input.LA(1);

                if ( (LA57_0==RULE_ID) ) {
                    int LA57_2 = input.LA(2);

                    if ( (LA57_2==67) ) {
                        alt57=1;
                    }


                }


                switch (alt57) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3703:5: this_ValidID_0= ruleValidID kw= '::'
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	              newCompositeNode(grammarAccess.getStaticQualifierAccess().getValidIDParserRuleCall_0()); 
            	          
            	    }
            	    pushFollow(FOLLOW_ruleValidID_in_ruleStaticQualifier8622);
            	    this_ValidID_0=ruleValidID();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      		current.merge(this_ValidID_0);
            	          
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	              afterParserOrEnumRuleCall();
            	          
            	    }
            	    kw=(Token)match(input,67,FOLLOW_67_in_ruleStaticQualifier8640); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	              current.merge(kw);
            	              newLeafNode(kw, grammarAccess.getStaticQualifierAccess().getColonColonKeyword_1()); 
            	          
            	    }

            	    }
            	    break;

            	default :
            	    if ( cnt57 >= 1 ) break loop57;
            	    if (state.backtracking>0) {state.failed=true; return current;}
                        EarlyExitException eee =
                            new EarlyExitException(57, input);
                        throw eee;
                }
                cnt57++;
            } while (true);


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleStaticQualifier"


    // $ANTLR start "entryRuleXConstructorCall"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3727:1: entryRuleXConstructorCall returns [EObject current=null] : iv_ruleXConstructorCall= ruleXConstructorCall EOF ;
    public final EObject entryRuleXConstructorCall() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXConstructorCall = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3728:2: (iv_ruleXConstructorCall= ruleXConstructorCall EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3729:2: iv_ruleXConstructorCall= ruleXConstructorCall EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXConstructorCallRule()); 
            }
            pushFollow(FOLLOW_ruleXConstructorCall_in_entryRuleXConstructorCall8681);
            iv_ruleXConstructorCall=ruleXConstructorCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXConstructorCall; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXConstructorCall8691); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXConstructorCall"


    // $ANTLR start "ruleXConstructorCall"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3736:1: ruleXConstructorCall returns [EObject current=null] : ( () otherlv_1= 'new' ( ( ruleQualifiedName ) ) (otherlv_3= '<' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? otherlv_8= '(' ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' ) ;
    public final EObject ruleXConstructorCall() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        EObject lv_typeArguments_4_0 = null;

        EObject lv_typeArguments_6_0 = null;

        EObject lv_arguments_9_0 = null;

        EObject lv_arguments_10_0 = null;

        EObject lv_arguments_12_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3739:28: ( ( () otherlv_1= 'new' ( ( ruleQualifiedName ) ) (otherlv_3= '<' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? otherlv_8= '(' ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3740:1: ( () otherlv_1= 'new' ( ( ruleQualifiedName ) ) (otherlv_3= '<' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? otherlv_8= '(' ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3740:1: ( () otherlv_1= 'new' ( ( ruleQualifiedName ) ) (otherlv_3= '<' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? otherlv_8= '(' ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3740:2: () otherlv_1= 'new' ( ( ruleQualifiedName ) ) (otherlv_3= '<' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? otherlv_8= '(' ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')'
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3740:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3741:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXConstructorCallAccess().getXConstructorCallAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,68,FOLLOW_68_in_ruleXConstructorCall8737); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXConstructorCallAccess().getNewKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3750:1: ( ( ruleQualifiedName ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3751:1: ( ruleQualifiedName )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3751:1: ( ruleQualifiedName )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3752:3: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getXConstructorCallRule());
              	        }
                      
            }
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getConstructorJvmConstructorCrossReference_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleQualifiedName_in_ruleXConstructorCall8760);
            ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3765:2: (otherlv_3= '<' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )?
            int alt59=2;
            int LA59_0 = input.LA(1);

            if ( (LA59_0==35) ) {
                alt59=1;
            }
            switch (alt59) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3765:4: otherlv_3= '<' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>'
                    {
                    otherlv_3=(Token)match(input,35,FOLLOW_35_in_ruleXConstructorCall8773); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getXConstructorCallAccess().getLessThanSignKeyword_3_0());
                          
                    }
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3769:1: ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3770:1: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3770:1: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3771:3: lv_typeArguments_4_0= ruleJvmArgumentTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleJvmArgumentTypeReference_in_ruleXConstructorCall8794);
                    lv_typeArguments_4_0=ruleJvmArgumentTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
                      	        }
                             		add(
                             			current, 
                             			"typeArguments",
                              		lv_typeArguments_4_0, 
                              		"JvmArgumentTypeReference");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3787:2: (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )*
                    loop58:
                    do {
                        int alt58=2;
                        int LA58_0 = input.LA(1);

                        if ( (LA58_0==49) ) {
                            alt58=1;
                        }


                        switch (alt58) {
                    	case 1 :
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3787:4: otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) )
                    	    {
                    	    otherlv_5=(Token)match(input,49,FOLLOW_49_in_ruleXConstructorCall8807); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_5, grammarAccess.getXConstructorCallAccess().getCommaKeyword_3_2_0());
                    	          
                    	    }
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3791:1: ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3792:1: (lv_typeArguments_6_0= ruleJvmArgumentTypeReference )
                    	    {
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3792:1: (lv_typeArguments_6_0= ruleJvmArgumentTypeReference )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3793:3: lv_typeArguments_6_0= ruleJvmArgumentTypeReference
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleJvmArgumentTypeReference_in_ruleXConstructorCall8828);
                    	    lv_typeArguments_6_0=ruleJvmArgumentTypeReference();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"typeArguments",
                    	              		lv_typeArguments_6_0, 
                    	              		"JvmArgumentTypeReference");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop58;
                        }
                    } while (true);

                    otherlv_7=(Token)match(input,34,FOLLOW_34_in_ruleXConstructorCall8842); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_7, grammarAccess.getXConstructorCallAccess().getGreaterThanSignKeyword_3_3());
                          
                    }

                    }
                    break;

            }

            otherlv_8=(Token)match(input,50,FOLLOW_50_in_ruleXConstructorCall8856); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_8, grammarAccess.getXConstructorCallAccess().getLeftParenthesisKeyword_4());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3817:1: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )?
            int alt61=3;
            alt61 = dfa61.predict(input);
            switch (alt61) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3817:2: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_arguments_9_0= ruleXShortClosure ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3817:2: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_arguments_9_0= ruleXShortClosure ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3817:3: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_arguments_9_0= ruleXShortClosure )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3829:1: (lv_arguments_9_0= ruleXShortClosure )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3830:3: lv_arguments_9_0= ruleXShortClosure
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXShortClosureParserRuleCall_5_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleXShortClosure_in_ruleXConstructorCall8918);
                    lv_arguments_9_0=ruleXShortClosure();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
                      	        }
                             		add(
                             			current, 
                             			"arguments",
                              		lv_arguments_9_0, 
                              		"XShortClosure");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3847:6: ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3847:6: ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3847:7: ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )*
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3847:7: ( (lv_arguments_10_0= ruleXExpression ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3848:1: (lv_arguments_10_0= ruleXExpression )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3848:1: (lv_arguments_10_0= ruleXExpression )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3849:3: lv_arguments_10_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_5_1_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleXExpression_in_ruleXConstructorCall8946);
                    lv_arguments_10_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
                      	        }
                             		add(
                             			current, 
                             			"arguments",
                              		lv_arguments_10_0, 
                              		"XExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3865:2: (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )*
                    loop60:
                    do {
                        int alt60=2;
                        int LA60_0 = input.LA(1);

                        if ( (LA60_0==49) ) {
                            alt60=1;
                        }


                        switch (alt60) {
                    	case 1 :
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3865:4: otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) )
                    	    {
                    	    otherlv_11=(Token)match(input,49,FOLLOW_49_in_ruleXConstructorCall8959); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_11, grammarAccess.getXConstructorCallAccess().getCommaKeyword_5_1_1_0());
                    	          
                    	    }
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3869:1: ( (lv_arguments_12_0= ruleXExpression ) )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3870:1: (lv_arguments_12_0= ruleXExpression )
                    	    {
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3870:1: (lv_arguments_12_0= ruleXExpression )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3871:3: lv_arguments_12_0= ruleXExpression
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_5_1_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleXExpression_in_ruleXConstructorCall8980);
                    	    lv_arguments_12_0=ruleXExpression();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"arguments",
                    	              		lv_arguments_12_0, 
                    	              		"XExpression");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop60;
                        }
                    } while (true);


                    }


                    }
                    break;

            }

            otherlv_13=(Token)match(input,51,FOLLOW_51_in_ruleXConstructorCall8997); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_13, grammarAccess.getXConstructorCallAccess().getRightParenthesisKeyword_6());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXConstructorCall"


    // $ANTLR start "entryRuleXBooleanLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3899:1: entryRuleXBooleanLiteral returns [EObject current=null] : iv_ruleXBooleanLiteral= ruleXBooleanLiteral EOF ;
    public final EObject entryRuleXBooleanLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXBooleanLiteral = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3900:2: (iv_ruleXBooleanLiteral= ruleXBooleanLiteral EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3901:2: iv_ruleXBooleanLiteral= ruleXBooleanLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXBooleanLiteralRule()); 
            }
            pushFollow(FOLLOW_ruleXBooleanLiteral_in_entryRuleXBooleanLiteral9033);
            iv_ruleXBooleanLiteral=ruleXBooleanLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXBooleanLiteral; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXBooleanLiteral9043); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXBooleanLiteral"


    // $ANTLR start "ruleXBooleanLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3908:1: ruleXBooleanLiteral returns [EObject current=null] : ( () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) ) ) ;
    public final EObject ruleXBooleanLiteral() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_isTrue_2_0=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3911:28: ( ( () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3912:1: ( () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3912:1: ( () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3912:2: () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3912:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3913:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXBooleanLiteralAccess().getXBooleanLiteralAction_0(),
                          current);
                  
            }

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3918:2: (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) )
            int alt62=2;
            int LA62_0 = input.LA(1);

            if ( (LA62_0==69) ) {
                alt62=1;
            }
            else if ( (LA62_0==70) ) {
                alt62=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 62, 0, input);

                throw nvae;
            }
            switch (alt62) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3918:4: otherlv_1= 'false'
                    {
                    otherlv_1=(Token)match(input,69,FOLLOW_69_in_ruleXBooleanLiteral9090); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getXBooleanLiteralAccess().getFalseKeyword_1_0());
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3923:6: ( (lv_isTrue_2_0= 'true' ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3923:6: ( (lv_isTrue_2_0= 'true' ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3924:1: (lv_isTrue_2_0= 'true' )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3924:1: (lv_isTrue_2_0= 'true' )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3925:3: lv_isTrue_2_0= 'true'
                    {
                    lv_isTrue_2_0=(Token)match(input,70,FOLLOW_70_in_ruleXBooleanLiteral9114); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_isTrue_2_0, grammarAccess.getXBooleanLiteralAccess().getIsTrueTrueKeyword_1_1_0());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getXBooleanLiteralRule());
                      	        }
                             		setWithLastConsumed(current, "isTrue", true, "true");
                      	    
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXBooleanLiteral"


    // $ANTLR start "entryRuleXNullLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3946:1: entryRuleXNullLiteral returns [EObject current=null] : iv_ruleXNullLiteral= ruleXNullLiteral EOF ;
    public final EObject entryRuleXNullLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXNullLiteral = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3947:2: (iv_ruleXNullLiteral= ruleXNullLiteral EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3948:2: iv_ruleXNullLiteral= ruleXNullLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXNullLiteralRule()); 
            }
            pushFollow(FOLLOW_ruleXNullLiteral_in_entryRuleXNullLiteral9164);
            iv_ruleXNullLiteral=ruleXNullLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXNullLiteral; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXNullLiteral9174); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXNullLiteral"


    // $ANTLR start "ruleXNullLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3955:1: ruleXNullLiteral returns [EObject current=null] : ( () otherlv_1= 'null' ) ;
    public final EObject ruleXNullLiteral() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3958:28: ( ( () otherlv_1= 'null' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3959:1: ( () otherlv_1= 'null' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3959:1: ( () otherlv_1= 'null' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3959:2: () otherlv_1= 'null'
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3959:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3960:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXNullLiteralAccess().getXNullLiteralAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,71,FOLLOW_71_in_ruleXNullLiteral9220); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXNullLiteralAccess().getNullKeyword_1());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXNullLiteral"


    // $ANTLR start "entryRuleXIntLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3977:1: entryRuleXIntLiteral returns [EObject current=null] : iv_ruleXIntLiteral= ruleXIntLiteral EOF ;
    public final EObject entryRuleXIntLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXIntLiteral = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3978:2: (iv_ruleXIntLiteral= ruleXIntLiteral EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3979:2: iv_ruleXIntLiteral= ruleXIntLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXIntLiteralRule()); 
            }
            pushFollow(FOLLOW_ruleXIntLiteral_in_entryRuleXIntLiteral9256);
            iv_ruleXIntLiteral=ruleXIntLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXIntLiteral; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXIntLiteral9266); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXIntLiteral"


    // $ANTLR start "ruleXIntLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3986:1: ruleXIntLiteral returns [EObject current=null] : ( () ( (lv_value_1_0= RULE_INT ) ) ) ;
    public final EObject ruleXIntLiteral() throws RecognitionException {
        EObject current = null;

        Token lv_value_1_0=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3989:28: ( ( () ( (lv_value_1_0= RULE_INT ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3990:1: ( () ( (lv_value_1_0= RULE_INT ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3990:1: ( () ( (lv_value_1_0= RULE_INT ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3990:2: () ( (lv_value_1_0= RULE_INT ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3990:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3991:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXIntLiteralAccess().getXIntLiteralAction_0(),
                          current);
                  
            }

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3996:2: ( (lv_value_1_0= RULE_INT ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3997:1: (lv_value_1_0= RULE_INT )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3997:1: (lv_value_1_0= RULE_INT )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3998:3: lv_value_1_0= RULE_INT
            {
            lv_value_1_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleXIntLiteral9317); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_value_1_0, grammarAccess.getXIntLiteralAccess().getValueINTTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getXIntLiteralRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"value",
                      		lv_value_1_0, 
                      		"INT");
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXIntLiteral"


    // $ANTLR start "entryRuleXStringLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4022:1: entryRuleXStringLiteral returns [EObject current=null] : iv_ruleXStringLiteral= ruleXStringLiteral EOF ;
    public final EObject entryRuleXStringLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXStringLiteral = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4023:2: (iv_ruleXStringLiteral= ruleXStringLiteral EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4024:2: iv_ruleXStringLiteral= ruleXStringLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXStringLiteralRule()); 
            }
            pushFollow(FOLLOW_ruleXStringLiteral_in_entryRuleXStringLiteral9358);
            iv_ruleXStringLiteral=ruleXStringLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXStringLiteral; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXStringLiteral9368); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXStringLiteral"


    // $ANTLR start "ruleXStringLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4031:1: ruleXStringLiteral returns [EObject current=null] : ( () ( (lv_value_1_0= RULE_STRING ) ) ) ;
    public final EObject ruleXStringLiteral() throws RecognitionException {
        EObject current = null;

        Token lv_value_1_0=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4034:28: ( ( () ( (lv_value_1_0= RULE_STRING ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4035:1: ( () ( (lv_value_1_0= RULE_STRING ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4035:1: ( () ( (lv_value_1_0= RULE_STRING ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4035:2: () ( (lv_value_1_0= RULE_STRING ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4035:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4036:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXStringLiteralAccess().getXStringLiteralAction_0(),
                          current);
                  
            }

            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4041:2: ( (lv_value_1_0= RULE_STRING ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4042:1: (lv_value_1_0= RULE_STRING )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4042:1: (lv_value_1_0= RULE_STRING )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4043:3: lv_value_1_0= RULE_STRING
            {
            lv_value_1_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleXStringLiteral9419); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_value_1_0, grammarAccess.getXStringLiteralAccess().getValueSTRINGTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getXStringLiteralRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"value",
                      		lv_value_1_0, 
                      		"STRING");
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXStringLiteral"


    // $ANTLR start "entryRuleXTypeLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4067:1: entryRuleXTypeLiteral returns [EObject current=null] : iv_ruleXTypeLiteral= ruleXTypeLiteral EOF ;
    public final EObject entryRuleXTypeLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXTypeLiteral = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4068:2: (iv_ruleXTypeLiteral= ruleXTypeLiteral EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4069:2: iv_ruleXTypeLiteral= ruleXTypeLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXTypeLiteralRule()); 
            }
            pushFollow(FOLLOW_ruleXTypeLiteral_in_entryRuleXTypeLiteral9460);
            iv_ruleXTypeLiteral=ruleXTypeLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXTypeLiteral; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXTypeLiteral9470); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXTypeLiteral"


    // $ANTLR start "ruleXTypeLiteral"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4076:1: ruleXTypeLiteral returns [EObject current=null] : ( () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) otherlv_4= ')' ) ;
    public final EObject ruleXTypeLiteral() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4079:28: ( ( () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) otherlv_4= ')' ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4080:1: ( () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) otherlv_4= ')' )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4080:1: ( () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) otherlv_4= ')' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4080:2: () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) otherlv_4= ')'
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4080:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4081:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXTypeLiteralAccess().getXTypeLiteralAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,72,FOLLOW_72_in_ruleXTypeLiteral9516); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXTypeLiteralAccess().getTypeofKeyword_1());
                  
            }
            otherlv_2=(Token)match(input,50,FOLLOW_50_in_ruleXTypeLiteral9528); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXTypeLiteralAccess().getLeftParenthesisKeyword_2());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4094:1: ( ( ruleQualifiedName ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4095:1: ( ruleQualifiedName )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4095:1: ( ruleQualifiedName )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4096:3: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getXTypeLiteralRule());
              	        }
                      
            }
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXTypeLiteralAccess().getTypeJvmTypeCrossReference_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleQualifiedName_in_ruleXTypeLiteral9551);
            ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_4=(Token)match(input,51,FOLLOW_51_in_ruleXTypeLiteral9563); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXTypeLiteralAccess().getRightParenthesisKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXTypeLiteral"


    // $ANTLR start "entryRuleXThrowExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4121:1: entryRuleXThrowExpression returns [EObject current=null] : iv_ruleXThrowExpression= ruleXThrowExpression EOF ;
    public final EObject entryRuleXThrowExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXThrowExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4122:2: (iv_ruleXThrowExpression= ruleXThrowExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4123:2: iv_ruleXThrowExpression= ruleXThrowExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXThrowExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXThrowExpression_in_entryRuleXThrowExpression9599);
            iv_ruleXThrowExpression=ruleXThrowExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXThrowExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXThrowExpression9609); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXThrowExpression"


    // $ANTLR start "ruleXThrowExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4130:1: ruleXThrowExpression returns [EObject current=null] : ( () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) ) ) ;
    public final EObject ruleXThrowExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_expression_2_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4133:28: ( ( () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4134:1: ( () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4134:1: ( () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4134:2: () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4134:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4135:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXThrowExpressionAccess().getXThrowExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,73,FOLLOW_73_in_ruleXThrowExpression9655); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXThrowExpressionAccess().getThrowKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4144:1: ( (lv_expression_2_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4145:1: (lv_expression_2_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4145:1: (lv_expression_2_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4146:3: lv_expression_2_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXThrowExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXThrowExpression9676);
            lv_expression_2_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXThrowExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"expression",
                      		lv_expression_2_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXThrowExpression"


    // $ANTLR start "entryRuleXReturnExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4170:1: entryRuleXReturnExpression returns [EObject current=null] : iv_ruleXReturnExpression= ruleXReturnExpression EOF ;
    public final EObject entryRuleXReturnExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXReturnExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4171:2: (iv_ruleXReturnExpression= ruleXReturnExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4172:2: iv_ruleXReturnExpression= ruleXReturnExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXReturnExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXReturnExpression_in_entryRuleXReturnExpression9712);
            iv_ruleXReturnExpression=ruleXReturnExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXReturnExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXReturnExpression9722); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXReturnExpression"


    // $ANTLR start "ruleXReturnExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4179:1: ruleXReturnExpression returns [EObject current=null] : ( () otherlv_1= 'return' ( ( ( ruleXExpression ) )=> (lv_expression_2_0= ruleXExpression ) )? ) ;
    public final EObject ruleXReturnExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_expression_2_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4182:28: ( ( () otherlv_1= 'return' ( ( ( ruleXExpression ) )=> (lv_expression_2_0= ruleXExpression ) )? ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4183:1: ( () otherlv_1= 'return' ( ( ( ruleXExpression ) )=> (lv_expression_2_0= ruleXExpression ) )? )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4183:1: ( () otherlv_1= 'return' ( ( ( ruleXExpression ) )=> (lv_expression_2_0= ruleXExpression ) )? )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4183:2: () otherlv_1= 'return' ( ( ( ruleXExpression ) )=> (lv_expression_2_0= ruleXExpression ) )?
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4183:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4184:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXReturnExpressionAccess().getXReturnExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,74,FOLLOW_74_in_ruleXReturnExpression9768); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXReturnExpressionAccess().getReturnKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4193:1: ( ( ( ruleXExpression ) )=> (lv_expression_2_0= ruleXExpression ) )?
            int alt63=2;
            alt63 = dfa63.predict(input);
            switch (alt63) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4193:2: ( ( ruleXExpression ) )=> (lv_expression_2_0= ruleXExpression )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4198:1: (lv_expression_2_0= ruleXExpression )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4199:3: lv_expression_2_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXReturnExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleXExpression_in_ruleXReturnExpression9799);
                    lv_expression_2_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXReturnExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"expression",
                              		lv_expression_2_0, 
                              		"XExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXReturnExpression"


    // $ANTLR start "entryRuleXTryCatchFinallyExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4223:1: entryRuleXTryCatchFinallyExpression returns [EObject current=null] : iv_ruleXTryCatchFinallyExpression= ruleXTryCatchFinallyExpression EOF ;
    public final EObject entryRuleXTryCatchFinallyExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXTryCatchFinallyExpression = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4224:2: (iv_ruleXTryCatchFinallyExpression= ruleXTryCatchFinallyExpression EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4225:2: iv_ruleXTryCatchFinallyExpression= ruleXTryCatchFinallyExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleXTryCatchFinallyExpression_in_entryRuleXTryCatchFinallyExpression9836);
            iv_ruleXTryCatchFinallyExpression=ruleXTryCatchFinallyExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXTryCatchFinallyExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXTryCatchFinallyExpression9846); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXTryCatchFinallyExpression"


    // $ANTLR start "ruleXTryCatchFinallyExpression"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4232:1: ruleXTryCatchFinallyExpression returns [EObject current=null] : ( () otherlv_1= 'try' ( (lv_expression_2_0= ruleXExpression ) ) ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) ) ) ;
    public final EObject ruleXTryCatchFinallyExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_expression_2_0 = null;

        EObject lv_catchClauses_3_0 = null;

        EObject lv_finallyExpression_5_0 = null;

        EObject lv_finallyExpression_7_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4235:28: ( ( () otherlv_1= 'try' ( (lv_expression_2_0= ruleXExpression ) ) ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4236:1: ( () otherlv_1= 'try' ( (lv_expression_2_0= ruleXExpression ) ) ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4236:1: ( () otherlv_1= 'try' ( (lv_expression_2_0= ruleXExpression ) ) ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4236:2: () otherlv_1= 'try' ( (lv_expression_2_0= ruleXExpression ) ) ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4236:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4237:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXTryCatchFinallyExpressionAccess().getXTryCatchFinallyExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,75,FOLLOW_75_in_ruleXTryCatchFinallyExpression9892); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXTryCatchFinallyExpressionAccess().getTryKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4246:1: ( (lv_expression_2_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4247:1: (lv_expression_2_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4247:1: (lv_expression_2_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4248:3: lv_expression_2_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXTryCatchFinallyExpression9913);
            lv_expression_2_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"expression",
                      		lv_expression_2_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4264:2: ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) )
            int alt66=2;
            int LA66_0 = input.LA(1);

            if ( (LA66_0==77) ) {
                alt66=1;
            }
            else if ( (LA66_0==76) ) {
                alt66=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 66, 0, input);

                throw nvae;
            }
            switch (alt66) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4264:3: ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4264:3: ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4264:4: ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )?
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4264:4: ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+
                    int cnt64=0;
                    loop64:
                    do {
                        int alt64=2;
                        int LA64_0 = input.LA(1);

                        if ( (LA64_0==77) ) {
                            int LA64_2 = input.LA(2);

                            if ( (synpred22_InternalTalkMe()) ) {
                                alt64=1;
                            }


                        }


                        switch (alt64) {
                    	case 1 :
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4264:5: ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause )
                    	    {
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4266:1: (lv_catchClauses_3_0= ruleXCatchClause )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4267:3: lv_catchClauses_3_0= ruleXCatchClause
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getCatchClausesXCatchClauseParserRuleCall_3_0_0_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleXCatchClause_in_ruleXTryCatchFinallyExpression9943);
                    	    lv_catchClauses_3_0=ruleXCatchClause();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"catchClauses",
                    	              		lv_catchClauses_3_0, 
                    	              		"XCatchClause");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt64 >= 1 ) break loop64;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(64, input);
                                throw eee;
                        }
                        cnt64++;
                    } while (true);

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4283:3: ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )?
                    int alt65=2;
                    int LA65_0 = input.LA(1);

                    if ( (LA65_0==76) ) {
                        int LA65_1 = input.LA(2);

                        if ( (synpred23_InternalTalkMe()) ) {
                            alt65=1;
                        }
                    }
                    switch (alt65) {
                        case 1 :
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4283:4: ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) )
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4283:4: ( ( 'finally' )=>otherlv_4= 'finally' )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4283:5: ( 'finally' )=>otherlv_4= 'finally'
                            {
                            otherlv_4=(Token)match(input,76,FOLLOW_76_in_ruleXTryCatchFinallyExpression9965); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                                  	newLeafNode(otherlv_4, grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_0_1_0());
                                  
                            }

                            }

                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4288:2: ( (lv_finallyExpression_5_0= ruleXExpression ) )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4289:1: (lv_finallyExpression_5_0= ruleXExpression )
                            {
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4289:1: (lv_finallyExpression_5_0= ruleXExpression )
                            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4290:3: lv_finallyExpression_5_0= ruleXExpression
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_0_1_1_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleXExpression_in_ruleXTryCatchFinallyExpression9987);
                            lv_finallyExpression_5_0=ruleXExpression();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
                              	        }
                                     		set(
                                     			current, 
                                     			"finallyExpression",
                                      		lv_finallyExpression_5_0, 
                                      		"XExpression");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4307:6: (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4307:6: (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4307:8: otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) )
                    {
                    otherlv_6=(Token)match(input,76,FOLLOW_76_in_ruleXTryCatchFinallyExpression10009); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_6, grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_1_0());
                          
                    }
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4311:1: ( (lv_finallyExpression_7_0= ruleXExpression ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4312:1: (lv_finallyExpression_7_0= ruleXExpression )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4312:1: (lv_finallyExpression_7_0= ruleXExpression )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4313:3: lv_finallyExpression_7_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleXExpression_in_ruleXTryCatchFinallyExpression10030);
                    lv_finallyExpression_7_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"finallyExpression",
                              		lv_finallyExpression_7_0, 
                              		"XExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXTryCatchFinallyExpression"


    // $ANTLR start "entryRuleXCatchClause"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4337:1: entryRuleXCatchClause returns [EObject current=null] : iv_ruleXCatchClause= ruleXCatchClause EOF ;
    public final EObject entryRuleXCatchClause() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXCatchClause = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4338:2: (iv_ruleXCatchClause= ruleXCatchClause EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4339:2: iv_ruleXCatchClause= ruleXCatchClause EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXCatchClauseRule()); 
            }
            pushFollow(FOLLOW_ruleXCatchClause_in_entryRuleXCatchClause10068);
            iv_ruleXCatchClause=ruleXCatchClause();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXCatchClause; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXCatchClause10078); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXCatchClause"


    // $ANTLR start "ruleXCatchClause"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4346:1: ruleXCatchClause returns [EObject current=null] : ( ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) ) ) ;
    public final EObject ruleXCatchClause() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_declaredParam_2_0 = null;

        EObject lv_expression_4_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4349:28: ( ( ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4350:1: ( ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4350:1: ( ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4350:2: ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4350:2: ( ( 'catch' )=>otherlv_0= 'catch' )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4350:3: ( 'catch' )=>otherlv_0= 'catch'
            {
            otherlv_0=(Token)match(input,77,FOLLOW_77_in_ruleXCatchClause10123); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getXCatchClauseAccess().getCatchKeyword_0());
                  
            }

            }

            otherlv_1=(Token)match(input,50,FOLLOW_50_in_ruleXCatchClause10136); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXCatchClauseAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4359:1: ( (lv_declaredParam_2_0= ruleJvmFormalParameter ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4360:1: (lv_declaredParam_2_0= ruleJvmFormalParameter )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4360:1: (lv_declaredParam_2_0= ruleJvmFormalParameter )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4361:3: lv_declaredParam_2_0= ruleJvmFormalParameter
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXCatchClauseAccess().getDeclaredParamJvmFormalParameterParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleJvmFormalParameter_in_ruleXCatchClause10157);
            lv_declaredParam_2_0=ruleJvmFormalParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXCatchClauseRule());
              	        }
                     		set(
                     			current, 
                     			"declaredParam",
                      		lv_declaredParam_2_0, 
                      		"JvmFormalParameter");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,51,FOLLOW_51_in_ruleXCatchClause10169); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getXCatchClauseAccess().getRightParenthesisKeyword_3());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4381:1: ( (lv_expression_4_0= ruleXExpression ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4382:1: (lv_expression_4_0= ruleXExpression )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4382:1: (lv_expression_4_0= ruleXExpression )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4383:3: lv_expression_4_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXCatchClauseAccess().getExpressionXExpressionParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleXExpression_in_ruleXCatchClause10190);
            lv_expression_4_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXCatchClauseRule());
              	        }
                     		set(
                     			current, 
                     			"expression",
                      		lv_expression_4_0, 
                      		"XExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXCatchClause"


    // $ANTLR start "entryRuleQualifiedName"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4407:1: entryRuleQualifiedName returns [String current=null] : iv_ruleQualifiedName= ruleQualifiedName EOF ;
    public final String entryRuleQualifiedName() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedName = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4408:2: (iv_ruleQualifiedName= ruleQualifiedName EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4409:2: iv_ruleQualifiedName= ruleQualifiedName EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getQualifiedNameRule()); 
            }
            pushFollow(FOLLOW_ruleQualifiedName_in_entryRuleQualifiedName10227);
            iv_ruleQualifiedName=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleQualifiedName.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleQualifiedName10238); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleQualifiedName"


    // $ANTLR start "ruleQualifiedName"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4416:1: ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )* ) ;
    public final AntlrDatatypeRuleToken ruleQualifiedName() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_ValidID_0 = null;

        AntlrDatatypeRuleToken this_ValidID_2 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4419:28: ( (this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )* ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4420:1: (this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )* )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4420:1: (this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )* )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4421:5: this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleValidID_in_ruleQualifiedName10285);
            this_ValidID_0=ruleValidID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(this_ValidID_0);
                  
            }
            if ( state.backtracking==0 ) {
               
                      afterParserOrEnumRuleCall();
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4431:1: ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )*
            loop67:
            do {
                int alt67=2;
                int LA67_0 = input.LA(1);

                if ( (LA67_0==46) ) {
                    int LA67_2 = input.LA(2);

                    if ( (LA67_2==RULE_ID) ) {
                        int LA67_3 = input.LA(3);

                        if ( (synpred25_InternalTalkMe()) ) {
                            alt67=1;
                        }


                    }


                }


                switch (alt67) {
            	case 1 :
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4431:2: ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID
            	    {
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4431:2: ( ( '.' )=>kw= '.' )
            	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4431:3: ( '.' )=>kw= '.'
            	    {
            	    kw=(Token)match(input,46,FOLLOW_46_in_ruleQualifiedName10313); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	              current.merge(kw);
            	              newLeafNode(kw, grammarAccess.getQualifiedNameAccess().getFullStopKeyword_1_0()); 
            	          
            	    }

            	    }

            	    if ( state.backtracking==0 ) {
            	       
            	              newCompositeNode(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_1_1()); 
            	          
            	    }
            	    pushFollow(FOLLOW_ruleValidID_in_ruleQualifiedName10336);
            	    this_ValidID_2=ruleValidID();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      		current.merge(this_ValidID_2);
            	          
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	              afterParserOrEnumRuleCall();
            	          
            	    }

            	    }
            	    break;

            	default :
            	    break loop67;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleQualifiedName"


    // $ANTLR start "entryRuleJvmTypeReference"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4458:1: entryRuleJvmTypeReference returns [EObject current=null] : iv_ruleJvmTypeReference= ruleJvmTypeReference EOF ;
    public final EObject entryRuleJvmTypeReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmTypeReference = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4459:2: (iv_ruleJvmTypeReference= ruleJvmTypeReference EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4460:2: iv_ruleJvmTypeReference= ruleJvmTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmTypeReferenceRule()); 
            }
            pushFollow(FOLLOW_ruleJvmTypeReference_in_entryRuleJvmTypeReference10383);
            iv_ruleJvmTypeReference=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmTypeReference; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleJvmTypeReference10393); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmTypeReference"


    // $ANTLR start "ruleJvmTypeReference"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4467:1: ruleJvmTypeReference returns [EObject current=null] : (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference | this_XFunctionTypeRef_1= ruleXFunctionTypeRef ) ;
    public final EObject ruleJvmTypeReference() throws RecognitionException {
        EObject current = null;

        EObject this_JvmParameterizedTypeReference_0 = null;

        EObject this_XFunctionTypeRef_1 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4470:28: ( (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference | this_XFunctionTypeRef_1= ruleXFunctionTypeRef ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4471:1: (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference | this_XFunctionTypeRef_1= ruleXFunctionTypeRef )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4471:1: (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference | this_XFunctionTypeRef_1= ruleXFunctionTypeRef )
            int alt68=2;
            int LA68_0 = input.LA(1);

            if ( (LA68_0==RULE_ID) ) {
                alt68=1;
            }
            else if ( (LA68_0==50||LA68_0==78) ) {
                alt68=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 68, 0, input);

                throw nvae;
            }
            switch (alt68) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4472:5: this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getJvmTypeReferenceAccess().getJvmParameterizedTypeReferenceParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleJvmParameterizedTypeReference_in_ruleJvmTypeReference10440);
                    this_JvmParameterizedTypeReference_0=ruleJvmParameterizedTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_JvmParameterizedTypeReference_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4482:5: this_XFunctionTypeRef_1= ruleXFunctionTypeRef
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getJvmTypeReferenceAccess().getXFunctionTypeRefParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleXFunctionTypeRef_in_ruleJvmTypeReference10467);
                    this_XFunctionTypeRef_1=ruleXFunctionTypeRef();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XFunctionTypeRef_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmTypeReference"


    // $ANTLR start "entryRuleXFunctionTypeRef"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4498:1: entryRuleXFunctionTypeRef returns [EObject current=null] : iv_ruleXFunctionTypeRef= ruleXFunctionTypeRef EOF ;
    public final EObject entryRuleXFunctionTypeRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXFunctionTypeRef = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4499:2: (iv_ruleXFunctionTypeRef= ruleXFunctionTypeRef EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4500:2: iv_ruleXFunctionTypeRef= ruleXFunctionTypeRef EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXFunctionTypeRefRule()); 
            }
            pushFollow(FOLLOW_ruleXFunctionTypeRef_in_entryRuleXFunctionTypeRef10502);
            iv_ruleXFunctionTypeRef=ruleXFunctionTypeRef();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXFunctionTypeRef; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleXFunctionTypeRef10512); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXFunctionTypeRef"


    // $ANTLR start "ruleXFunctionTypeRef"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4507:1: ruleXFunctionTypeRef returns [EObject current=null] : ( (otherlv_0= '(' ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* otherlv_4= ')' )? otherlv_5= '=>' ( (lv_returnType_6_0= ruleJvmTypeReference ) ) ) ;
    public final EObject ruleXFunctionTypeRef() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        EObject lv_paramTypes_1_0 = null;

        EObject lv_paramTypes_3_0 = null;

        EObject lv_returnType_6_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4510:28: ( ( (otherlv_0= '(' ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* otherlv_4= ')' )? otherlv_5= '=>' ( (lv_returnType_6_0= ruleJvmTypeReference ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4511:1: ( (otherlv_0= '(' ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* otherlv_4= ')' )? otherlv_5= '=>' ( (lv_returnType_6_0= ruleJvmTypeReference ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4511:1: ( (otherlv_0= '(' ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* otherlv_4= ')' )? otherlv_5= '=>' ( (lv_returnType_6_0= ruleJvmTypeReference ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4511:2: (otherlv_0= '(' ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* otherlv_4= ')' )? otherlv_5= '=>' ( (lv_returnType_6_0= ruleJvmTypeReference ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4511:2: (otherlv_0= '(' ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* otherlv_4= ')' )?
            int alt70=2;
            int LA70_0 = input.LA(1);

            if ( (LA70_0==50) ) {
                alt70=1;
            }
            switch (alt70) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4511:4: otherlv_0= '(' ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* otherlv_4= ')'
                    {
                    otherlv_0=(Token)match(input,50,FOLLOW_50_in_ruleXFunctionTypeRef10550); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_0, grammarAccess.getXFunctionTypeRefAccess().getLeftParenthesisKeyword_0_0());
                          
                    }
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4515:1: ( (lv_paramTypes_1_0= ruleJvmTypeReference ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4516:1: (lv_paramTypes_1_0= ruleJvmTypeReference )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4516:1: (lv_paramTypes_1_0= ruleJvmTypeReference )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4517:3: lv_paramTypes_1_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleJvmTypeReference_in_ruleXFunctionTypeRef10571);
                    lv_paramTypes_1_0=ruleJvmTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getXFunctionTypeRefRule());
                      	        }
                             		add(
                             			current, 
                             			"paramTypes",
                              		lv_paramTypes_1_0, 
                              		"JvmTypeReference");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4533:2: (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )*
                    loop69:
                    do {
                        int alt69=2;
                        int LA69_0 = input.LA(1);

                        if ( (LA69_0==49) ) {
                            alt69=1;
                        }


                        switch (alt69) {
                    	case 1 :
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4533:4: otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) )
                    	    {
                    	    otherlv_2=(Token)match(input,49,FOLLOW_49_in_ruleXFunctionTypeRef10584); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_2, grammarAccess.getXFunctionTypeRefAccess().getCommaKeyword_0_2_0());
                    	          
                    	    }
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4537:1: ( (lv_paramTypes_3_0= ruleJvmTypeReference ) )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4538:1: (lv_paramTypes_3_0= ruleJvmTypeReference )
                    	    {
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4538:1: (lv_paramTypes_3_0= ruleJvmTypeReference )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4539:3: lv_paramTypes_3_0= ruleJvmTypeReference
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleJvmTypeReference_in_ruleXFunctionTypeRef10605);
                    	    lv_paramTypes_3_0=ruleJvmTypeReference();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getXFunctionTypeRefRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"paramTypes",
                    	              		lv_paramTypes_3_0, 
                    	              		"JvmTypeReference");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop69;
                        }
                    } while (true);

                    otherlv_4=(Token)match(input,51,FOLLOW_51_in_ruleXFunctionTypeRef10619); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_4, grammarAccess.getXFunctionTypeRefAccess().getRightParenthesisKeyword_0_3());
                          
                    }

                    }
                    break;

            }

            otherlv_5=(Token)match(input,78,FOLLOW_78_in_ruleXFunctionTypeRef10633); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getXFunctionTypeRefAccess().getEqualsSignGreaterThanSignKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4563:1: ( (lv_returnType_6_0= ruleJvmTypeReference ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4564:1: (lv_returnType_6_0= ruleJvmTypeReference )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4564:1: (lv_returnType_6_0= ruleJvmTypeReference )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4565:3: lv_returnType_6_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getReturnTypeJvmTypeReferenceParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleJvmTypeReference_in_ruleXFunctionTypeRef10654);
            lv_returnType_6_0=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getXFunctionTypeRefRule());
              	        }
                     		set(
                     			current, 
                     			"returnType",
                      		lv_returnType_6_0, 
                      		"JvmTypeReference");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXFunctionTypeRef"


    // $ANTLR start "entryRuleJvmParameterizedTypeReference"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4589:1: entryRuleJvmParameterizedTypeReference returns [EObject current=null] : iv_ruleJvmParameterizedTypeReference= ruleJvmParameterizedTypeReference EOF ;
    public final EObject entryRuleJvmParameterizedTypeReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmParameterizedTypeReference = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4590:2: (iv_ruleJvmParameterizedTypeReference= ruleJvmParameterizedTypeReference EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4591:2: iv_ruleJvmParameterizedTypeReference= ruleJvmParameterizedTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceRule()); 
            }
            pushFollow(FOLLOW_ruleJvmParameterizedTypeReference_in_entryRuleJvmParameterizedTypeReference10690);
            iv_ruleJvmParameterizedTypeReference=ruleJvmParameterizedTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmParameterizedTypeReference; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleJvmParameterizedTypeReference10700); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmParameterizedTypeReference"


    // $ANTLR start "ruleJvmParameterizedTypeReference"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4598:1: ruleJvmParameterizedTypeReference returns [EObject current=null] : ( ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )? ) ;
    public final EObject ruleJvmParameterizedTypeReference() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_arguments_2_0 = null;

        EObject lv_arguments_4_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4601:28: ( ( ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )? ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4602:1: ( ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )? )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4602:1: ( ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )? )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4602:2: ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )?
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4602:2: ( ( ruleQualifiedName ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4603:1: ( ruleQualifiedName )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4603:1: ( ruleQualifiedName )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4604:3: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getJvmParameterizedTypeReferenceRule());
              	        }
                      
            }
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeCrossReference_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleQualifiedName_in_ruleJvmParameterizedTypeReference10748);
            ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4617:2: ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )?
            int alt72=2;
            alt72 = dfa72.predict(input);
            switch (alt72) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4617:3: ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>'
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4617:3: ( ( '<' )=>otherlv_1= '<' )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4617:4: ( '<' )=>otherlv_1= '<'
                    {
                    otherlv_1=(Token)match(input,35,FOLLOW_35_in_ruleJvmParameterizedTypeReference10769); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getJvmParameterizedTypeReferenceAccess().getLessThanSignKeyword_1_0());
                          
                    }

                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4622:2: ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4623:1: (lv_arguments_2_0= ruleJvmArgumentTypeReference )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4623:1: (lv_arguments_2_0= ruleJvmArgumentTypeReference )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4624:3: lv_arguments_2_0= ruleJvmArgumentTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleJvmArgumentTypeReference_in_ruleJvmParameterizedTypeReference10791);
                    lv_arguments_2_0=ruleJvmArgumentTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getJvmParameterizedTypeReferenceRule());
                      	        }
                             		add(
                             			current, 
                             			"arguments",
                              		lv_arguments_2_0, 
                              		"JvmArgumentTypeReference");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4640:2: (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )*
                    loop71:
                    do {
                        int alt71=2;
                        int LA71_0 = input.LA(1);

                        if ( (LA71_0==49) ) {
                            alt71=1;
                        }


                        switch (alt71) {
                    	case 1 :
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4640:4: otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) )
                    	    {
                    	    otherlv_3=(Token)match(input,49,FOLLOW_49_in_ruleJvmParameterizedTypeReference10804); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_3, grammarAccess.getJvmParameterizedTypeReferenceAccess().getCommaKeyword_1_2_0());
                    	          
                    	    }
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4644:1: ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4645:1: (lv_arguments_4_0= ruleJvmArgumentTypeReference )
                    	    {
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4645:1: (lv_arguments_4_0= ruleJvmArgumentTypeReference )
                    	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4646:3: lv_arguments_4_0= ruleJvmArgumentTypeReference
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleJvmArgumentTypeReference_in_ruleJvmParameterizedTypeReference10825);
                    	    lv_arguments_4_0=ruleJvmArgumentTypeReference();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getJvmParameterizedTypeReferenceRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"arguments",
                    	              		lv_arguments_4_0, 
                    	              		"JvmArgumentTypeReference");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop71;
                        }
                    } while (true);

                    otherlv_5=(Token)match(input,34,FOLLOW_34_in_ruleJvmParameterizedTypeReference10839); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_5, grammarAccess.getJvmParameterizedTypeReferenceAccess().getGreaterThanSignKeyword_1_3());
                          
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmParameterizedTypeReference"


    // $ANTLR start "entryRuleJvmArgumentTypeReference"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4674:1: entryRuleJvmArgumentTypeReference returns [EObject current=null] : iv_ruleJvmArgumentTypeReference= ruleJvmArgumentTypeReference EOF ;
    public final EObject entryRuleJvmArgumentTypeReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmArgumentTypeReference = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4675:2: (iv_ruleJvmArgumentTypeReference= ruleJvmArgumentTypeReference EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4676:2: iv_ruleJvmArgumentTypeReference= ruleJvmArgumentTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceRule()); 
            }
            pushFollow(FOLLOW_ruleJvmArgumentTypeReference_in_entryRuleJvmArgumentTypeReference10877);
            iv_ruleJvmArgumentTypeReference=ruleJvmArgumentTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmArgumentTypeReference; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleJvmArgumentTypeReference10887); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmArgumentTypeReference"


    // $ANTLR start "ruleJvmArgumentTypeReference"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4683:1: ruleJvmArgumentTypeReference returns [EObject current=null] : (this_JvmTypeReference_0= ruleJvmTypeReference | this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference ) ;
    public final EObject ruleJvmArgumentTypeReference() throws RecognitionException {
        EObject current = null;

        EObject this_JvmTypeReference_0 = null;

        EObject this_JvmWildcardTypeReference_1 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4686:28: ( (this_JvmTypeReference_0= ruleJvmTypeReference | this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4687:1: (this_JvmTypeReference_0= ruleJvmTypeReference | this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4687:1: (this_JvmTypeReference_0= ruleJvmTypeReference | this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference )
            int alt73=2;
            int LA73_0 = input.LA(1);

            if ( (LA73_0==RULE_ID||LA73_0==50||LA73_0==78) ) {
                alt73=1;
            }
            else if ( (LA73_0==79) ) {
                alt73=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 73, 0, input);

                throw nvae;
            }
            switch (alt73) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4688:5: this_JvmTypeReference_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmTypeReferenceParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleJvmTypeReference_in_ruleJvmArgumentTypeReference10934);
                    this_JvmTypeReference_0=ruleJvmTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_JvmTypeReference_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4698:5: this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmWildcardTypeReferenceParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleJvmWildcardTypeReference_in_ruleJvmArgumentTypeReference10961);
                    this_JvmWildcardTypeReference_1=ruleJvmWildcardTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_JvmWildcardTypeReference_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmArgumentTypeReference"


    // $ANTLR start "entryRuleJvmWildcardTypeReference"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4714:1: entryRuleJvmWildcardTypeReference returns [EObject current=null] : iv_ruleJvmWildcardTypeReference= ruleJvmWildcardTypeReference EOF ;
    public final EObject entryRuleJvmWildcardTypeReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmWildcardTypeReference = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4715:2: (iv_ruleJvmWildcardTypeReference= ruleJvmWildcardTypeReference EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4716:2: iv_ruleJvmWildcardTypeReference= ruleJvmWildcardTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceRule()); 
            }
            pushFollow(FOLLOW_ruleJvmWildcardTypeReference_in_entryRuleJvmWildcardTypeReference10996);
            iv_ruleJvmWildcardTypeReference=ruleJvmWildcardTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmWildcardTypeReference; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleJvmWildcardTypeReference11006); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmWildcardTypeReference"


    // $ANTLR start "ruleJvmWildcardTypeReference"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4723:1: ruleJvmWildcardTypeReference returns [EObject current=null] : ( () otherlv_1= '?' ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) | ( (lv_constraints_3_0= ruleJvmLowerBound ) ) )? ) ;
    public final EObject ruleJvmWildcardTypeReference() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_constraints_2_0 = null;

        EObject lv_constraints_3_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4726:28: ( ( () otherlv_1= '?' ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) | ( (lv_constraints_3_0= ruleJvmLowerBound ) ) )? ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4727:1: ( () otherlv_1= '?' ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) | ( (lv_constraints_3_0= ruleJvmLowerBound ) ) )? )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4727:1: ( () otherlv_1= '?' ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) | ( (lv_constraints_3_0= ruleJvmLowerBound ) ) )? )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4727:2: () otherlv_1= '?' ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) | ( (lv_constraints_3_0= ruleJvmLowerBound ) ) )?
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4727:2: ()
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4728:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getJvmWildcardTypeReferenceAccess().getJvmWildcardTypeReferenceAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,79,FOLLOW_79_in_ruleJvmWildcardTypeReference11052); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getJvmWildcardTypeReferenceAccess().getQuestionMarkKeyword_1());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4737:1: ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) | ( (lv_constraints_3_0= ruleJvmLowerBound ) ) )?
            int alt74=3;
            int LA74_0 = input.LA(1);

            if ( (LA74_0==80) ) {
                alt74=1;
            }
            else if ( (LA74_0==66) ) {
                alt74=2;
            }
            switch (alt74) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4737:2: ( (lv_constraints_2_0= ruleJvmUpperBound ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4737:2: ( (lv_constraints_2_0= ruleJvmUpperBound ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4738:1: (lv_constraints_2_0= ruleJvmUpperBound )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4738:1: (lv_constraints_2_0= ruleJvmUpperBound )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4739:3: lv_constraints_2_0= ruleJvmUpperBound
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmUpperBoundParserRuleCall_2_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleJvmUpperBound_in_ruleJvmWildcardTypeReference11074);
                    lv_constraints_2_0=ruleJvmUpperBound();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getJvmWildcardTypeReferenceRule());
                      	        }
                             		add(
                             			current, 
                             			"constraints",
                              		lv_constraints_2_0, 
                              		"JvmUpperBound");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4756:6: ( (lv_constraints_3_0= ruleJvmLowerBound ) )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4756:6: ( (lv_constraints_3_0= ruleJvmLowerBound ) )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4757:1: (lv_constraints_3_0= ruleJvmLowerBound )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4757:1: (lv_constraints_3_0= ruleJvmLowerBound )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4758:3: lv_constraints_3_0= ruleJvmLowerBound
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmLowerBoundParserRuleCall_2_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleJvmLowerBound_in_ruleJvmWildcardTypeReference11101);
                    lv_constraints_3_0=ruleJvmLowerBound();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getJvmWildcardTypeReferenceRule());
                      	        }
                             		add(
                             			current, 
                             			"constraints",
                              		lv_constraints_3_0, 
                              		"JvmLowerBound");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmWildcardTypeReference"


    // $ANTLR start "entryRuleJvmUpperBound"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4782:1: entryRuleJvmUpperBound returns [EObject current=null] : iv_ruleJvmUpperBound= ruleJvmUpperBound EOF ;
    public final EObject entryRuleJvmUpperBound() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmUpperBound = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4783:2: (iv_ruleJvmUpperBound= ruleJvmUpperBound EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4784:2: iv_ruleJvmUpperBound= ruleJvmUpperBound EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmUpperBoundRule()); 
            }
            pushFollow(FOLLOW_ruleJvmUpperBound_in_entryRuleJvmUpperBound11139);
            iv_ruleJvmUpperBound=ruleJvmUpperBound();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmUpperBound; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleJvmUpperBound11149); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmUpperBound"


    // $ANTLR start "ruleJvmUpperBound"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4791:1: ruleJvmUpperBound returns [EObject current=null] : (otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) ;
    public final EObject ruleJvmUpperBound() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_typeReference_1_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4794:28: ( (otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4795:1: (otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4795:1: (otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4795:3: otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            {
            otherlv_0=(Token)match(input,80,FOLLOW_80_in_ruleJvmUpperBound11186); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getJvmUpperBoundAccess().getExtendsKeyword_0());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4799:1: ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4800:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4800:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4801:3: lv_typeReference_1_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getJvmUpperBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleJvmTypeReference_in_ruleJvmUpperBound11207);
            lv_typeReference_1_0=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getJvmUpperBoundRule());
              	        }
                     		set(
                     			current, 
                     			"typeReference",
                      		lv_typeReference_1_0, 
                      		"JvmTypeReference");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmUpperBound"


    // $ANTLR start "entryRuleJvmUpperBoundAnded"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4825:1: entryRuleJvmUpperBoundAnded returns [EObject current=null] : iv_ruleJvmUpperBoundAnded= ruleJvmUpperBoundAnded EOF ;
    public final EObject entryRuleJvmUpperBoundAnded() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmUpperBoundAnded = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4826:2: (iv_ruleJvmUpperBoundAnded= ruleJvmUpperBoundAnded EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4827:2: iv_ruleJvmUpperBoundAnded= ruleJvmUpperBoundAnded EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmUpperBoundAndedRule()); 
            }
            pushFollow(FOLLOW_ruleJvmUpperBoundAnded_in_entryRuleJvmUpperBoundAnded11243);
            iv_ruleJvmUpperBoundAnded=ruleJvmUpperBoundAnded();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmUpperBoundAnded; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleJvmUpperBoundAnded11253); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmUpperBoundAnded"


    // $ANTLR start "ruleJvmUpperBoundAnded"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4834:1: ruleJvmUpperBoundAnded returns [EObject current=null] : (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) ;
    public final EObject ruleJvmUpperBoundAnded() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_typeReference_1_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4837:28: ( (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4838:1: (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4838:1: (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4838:3: otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            {
            otherlv_0=(Token)match(input,81,FOLLOW_81_in_ruleJvmUpperBoundAnded11290); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getJvmUpperBoundAndedAccess().getAmpersandKeyword_0());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4842:1: ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4843:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4843:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4844:3: lv_typeReference_1_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getJvmUpperBoundAndedAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleJvmTypeReference_in_ruleJvmUpperBoundAnded11311);
            lv_typeReference_1_0=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getJvmUpperBoundAndedRule());
              	        }
                     		set(
                     			current, 
                     			"typeReference",
                      		lv_typeReference_1_0, 
                      		"JvmTypeReference");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmUpperBoundAnded"


    // $ANTLR start "entryRuleJvmLowerBound"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4868:1: entryRuleJvmLowerBound returns [EObject current=null] : iv_ruleJvmLowerBound= ruleJvmLowerBound EOF ;
    public final EObject entryRuleJvmLowerBound() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmLowerBound = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4869:2: (iv_ruleJvmLowerBound= ruleJvmLowerBound EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4870:2: iv_ruleJvmLowerBound= ruleJvmLowerBound EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmLowerBoundRule()); 
            }
            pushFollow(FOLLOW_ruleJvmLowerBound_in_entryRuleJvmLowerBound11347);
            iv_ruleJvmLowerBound=ruleJvmLowerBound();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmLowerBound; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleJvmLowerBound11357); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmLowerBound"


    // $ANTLR start "ruleJvmLowerBound"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4877:1: ruleJvmLowerBound returns [EObject current=null] : (otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) ;
    public final EObject ruleJvmLowerBound() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_typeReference_1_0 = null;


         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4880:28: ( (otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4881:1: (otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4881:1: (otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4881:3: otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            {
            otherlv_0=(Token)match(input,66,FOLLOW_66_in_ruleJvmLowerBound11394); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getJvmLowerBoundAccess().getSuperKeyword_0());
                  
            }
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4885:1: ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4886:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4886:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4887:3: lv_typeReference_1_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getJvmLowerBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleJvmTypeReference_in_ruleJvmLowerBound11415);
            lv_typeReference_1_0=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getJvmLowerBoundRule());
              	        }
                     		set(
                     			current, 
                     			"typeReference",
                      		lv_typeReference_1_0, 
                      		"JvmTypeReference");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmLowerBound"


    // $ANTLR start "entryRuleValidID"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4913:1: entryRuleValidID returns [String current=null] : iv_ruleValidID= ruleValidID EOF ;
    public final String entryRuleValidID() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleValidID = null;


        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4914:2: (iv_ruleValidID= ruleValidID EOF )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4915:2: iv_ruleValidID= ruleValidID EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getValidIDRule()); 
            }
            pushFollow(FOLLOW_ruleValidID_in_entryRuleValidID11454);
            iv_ruleValidID=ruleValidID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleValidID.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleValidID11465); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleValidID"


    // $ANTLR start "ruleValidID"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4922:1: ruleValidID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_ID_0= RULE_ID ;
    public final AntlrDatatypeRuleToken ruleValidID() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;

         enterRule(); 
            
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4925:28: (this_ID_0= RULE_ID )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4926:5: this_ID_0= RULE_ID
            {
            this_ID_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleValidID11504); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(this_ID_0);
                  
            }
            if ( state.backtracking==0 ) {
               
                  newLeafNode(this_ID_0, grammarAccess.getValidIDAccess().getIDTerminalRuleCall()); 
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleValidID"


    // $ANTLR start "ruleProtocol"
    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4941:1: ruleProtocol returns [Enumerator current=null] : ( (enumLiteral_0= 'UDP' ) | (enumLiteral_1= 'TCP' ) ) ;
    public final Enumerator ruleProtocol() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;

         enterRule(); 
        try {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4943:28: ( ( (enumLiteral_0= 'UDP' ) | (enumLiteral_1= 'TCP' ) ) )
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4944:1: ( (enumLiteral_0= 'UDP' ) | (enumLiteral_1= 'TCP' ) )
            {
            // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4944:1: ( (enumLiteral_0= 'UDP' ) | (enumLiteral_1= 'TCP' ) )
            int alt75=2;
            int LA75_0 = input.LA(1);

            if ( (LA75_0==82) ) {
                alt75=1;
            }
            else if ( (LA75_0==83) ) {
                alt75=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 75, 0, input);

                throw nvae;
            }
            switch (alt75) {
                case 1 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4944:2: (enumLiteral_0= 'UDP' )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4944:2: (enumLiteral_0= 'UDP' )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4944:4: enumLiteral_0= 'UDP'
                    {
                    enumLiteral_0=(Token)match(input,82,FOLLOW_82_in_ruleProtocol11562); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current = grammarAccess.getProtocolAccess().getUDPEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                              newLeafNode(enumLiteral_0, grammarAccess.getProtocolAccess().getUDPEnumLiteralDeclaration_0()); 
                          
                    }

                    }


                    }
                    break;
                case 2 :
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4950:6: (enumLiteral_1= 'TCP' )
                    {
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4950:6: (enumLiteral_1= 'TCP' )
                    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4950:8: enumLiteral_1= 'TCP'
                    {
                    enumLiteral_1=(Token)match(input,83,FOLLOW_83_in_ruleProtocol11579); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current = grammarAccess.getProtocolAccess().getTCPEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                              newLeafNode(enumLiteral_1, grammarAccess.getProtocolAccess().getTCPEnumLiteralDeclaration_1()); 
                          
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleProtocol"

    // $ANTLR start synpred1_InternalTalkMe
    public final void synpred1_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:765:3: ( ( () ( ( ruleOpMultiAssign ) ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:765:4: ( () ( ( ruleOpMultiAssign ) ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:765:4: ( () ( ( ruleOpMultiAssign ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:765:5: () ( ( ruleOpMultiAssign ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:765:5: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:766:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:766:2: ( ( ruleOpMultiAssign ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:767:1: ( ruleOpMultiAssign )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:767:1: ( ruleOpMultiAssign )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:768:3: ruleOpMultiAssign
        {
        pushFollow(FOLLOW_ruleOpMultiAssign_in_synpred1_InternalTalkMe1664);
        ruleOpMultiAssign();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred1_InternalTalkMe

    // $ANTLR start synpred2_InternalTalkMe
    public final void synpred2_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:893:3: ( ( () ( ( ruleOpOr ) ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:893:4: ( () ( ( ruleOpOr ) ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:893:4: ( () ( ( ruleOpOr ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:893:5: () ( ( ruleOpOr ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:893:5: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:894:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:894:2: ( ( ruleOpOr ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:895:1: ( ruleOpOr )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:895:1: ( ruleOpOr )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:896:3: ruleOpOr
        {
        pushFollow(FOLLOW_ruleOpOr_in_synpred2_InternalTalkMe2012);
        ruleOpOr();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred2_InternalTalkMe

    // $ANTLR start synpred3_InternalTalkMe
    public final void synpred3_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:994:3: ( ( () ( ( ruleOpAnd ) ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:994:4: ( () ( ( ruleOpAnd ) ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:994:4: ( () ( ( ruleOpAnd ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:994:5: () ( ( ruleOpAnd ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:994:5: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:995:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:995:2: ( ( ruleOpAnd ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:996:1: ( ruleOpAnd )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:996:1: ( ruleOpAnd )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:997:3: ruleOpAnd
        {
        pushFollow(FOLLOW_ruleOpAnd_in_synpred3_InternalTalkMe2271);
        ruleOpAnd();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred3_InternalTalkMe

    // $ANTLR start synpred4_InternalTalkMe
    public final void synpred4_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1095:3: ( ( () ( ( ruleOpEquality ) ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1095:4: ( () ( ( ruleOpEquality ) ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1095:4: ( () ( ( ruleOpEquality ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1095:5: () ( ( ruleOpEquality ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1095:5: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1096:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1096:2: ( ( ruleOpEquality ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1097:1: ( ruleOpEquality )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1097:1: ( ruleOpEquality )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1098:3: ruleOpEquality
        {
        pushFollow(FOLLOW_ruleOpEquality_in_synpred4_InternalTalkMe2530);
        ruleOpEquality();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred4_InternalTalkMe

    // $ANTLR start synpred5_InternalTalkMe
    public final void synpred5_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1203:4: ( ( () 'instanceof' ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1203:5: ( () 'instanceof' )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1203:5: ( () 'instanceof' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1203:6: () 'instanceof'
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1203:6: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1204:1: 
        {
        }

        match(input,31,FOLLOW_31_in_synpred5_InternalTalkMe2806); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred5_InternalTalkMe

    // $ANTLR start synpred6_InternalTalkMe
    public final void synpred6_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1231:8: ( ( () ( ( ruleOpCompare ) ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1231:9: ( () ( ( ruleOpCompare ) ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1231:9: ( () ( ( ruleOpCompare ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1231:10: () ( ( ruleOpCompare ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1231:10: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1232:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1232:2: ( ( ruleOpCompare ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1233:1: ( ruleOpCompare )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1233:1: ( ruleOpCompare )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1234:3: ruleOpCompare
        {
        pushFollow(FOLLOW_ruleOpCompare_in_synpred6_InternalTalkMe2879);
        ruleOpCompare();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred6_InternalTalkMe

    // $ANTLR start synpred7_InternalTalkMe
    public final void synpred7_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1353:3: ( ( () ( ( ruleOpOther ) ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1353:4: ( () ( ( ruleOpOther ) ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1353:4: ( () ( ( ruleOpOther ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1353:5: () ( ( ruleOpOther ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1353:5: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1354:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1354:2: ( ( ruleOpOther ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1355:1: ( ruleOpOther )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1355:1: ( ruleOpOther )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1356:3: ruleOpOther
        {
        pushFollow(FOLLOW_ruleOpOther_in_synpred7_InternalTalkMe3198);
        ruleOpOther();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred7_InternalTalkMe

    // $ANTLR start synpred8_InternalTalkMe
    public final void synpred8_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1461:3: ( ( () ( ( ruleOpAdd ) ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1461:4: ( () ( ( ruleOpAdd ) ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1461:4: ( () ( ( ruleOpAdd ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1461:5: () ( ( ruleOpAdd ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1461:5: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1462:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1462:2: ( ( ruleOpAdd ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1463:1: ( ruleOpAdd )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1463:1: ( ruleOpAdd )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1464:3: ruleOpAdd
        {
        pushFollow(FOLLOW_ruleOpAdd_in_synpred8_InternalTalkMe3478);
        ruleOpAdd();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred8_InternalTalkMe

    // $ANTLR start synpred9_InternalTalkMe
    public final void synpred9_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1569:3: ( ( () ( ( ruleOpMulti ) ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1569:4: ( () ( ( ruleOpMulti ) ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1569:4: ( () ( ( ruleOpMulti ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1569:5: () ( ( ruleOpMulti ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1569:5: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1570:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1570:2: ( ( ruleOpMulti ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1571:1: ( ruleOpMulti )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1571:1: ( ruleOpMulti )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1572:3: ruleOpMulti
        {
        pushFollow(FOLLOW_ruleOpMulti_in_synpred9_InternalTalkMe3758);
        ruleOpMulti();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred9_InternalTalkMe

    // $ANTLR start synpred10_InternalTalkMe
    public final void synpred10_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1802:3: ( ( () 'as' ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1802:4: ( () 'as' )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1802:4: ( () 'as' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1802:5: () 'as'
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1802:5: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1803:1: 
        {
        }

        match(input,45,FOLLOW_45_in_synpred10_InternalTalkMe4352); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred10_InternalTalkMe

    // $ANTLR start synpred11_InternalTalkMe
    public final void synpred11_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1862:4: ( ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1862:5: ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1862:5: ( () '.' ( ( ruleValidID ) ) ruleOpSingleAssign )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1862:6: () '.' ( ( ruleValidID ) ) ruleOpSingleAssign
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1862:6: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1863:1: 
        {
        }

        match(input,46,FOLLOW_46_in_synpred11_InternalTalkMe4506); if (state.failed) return ;
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1864:1: ( ( ruleValidID ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1865:1: ( ruleValidID )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1865:1: ( ruleValidID )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1866:3: ruleValidID
        {
        pushFollow(FOLLOW_ruleValidID_in_synpred11_InternalTalkMe4515);
        ruleValidID();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        pushFollow(FOLLOW_ruleOpSingleAssign_in_synpred11_InternalTalkMe4521);
        ruleOpSingleAssign();

        state._fsp--;
        if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred11_InternalTalkMe

    // $ANTLR start synpred12_InternalTalkMe
    public final void synpred12_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1920:8: ( ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1920:9: ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1920:9: ( () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1920:10: () ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1920:10: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1921:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1921:2: ( '.' | ( ( '?.' ) ) | ( ( '*.' ) ) )
        int alt76=3;
        switch ( input.LA(1) ) {
        case 46:
            {
            alt76=1;
            }
            break;
        case 47:
            {
            alt76=2;
            }
            break;
        case 48:
            {
            alt76=3;
            }
            break;
        default:
            if (state.backtracking>0) {state.failed=true; return ;}
            NoViableAltException nvae =
                new NoViableAltException("", 76, 0, input);

            throw nvae;
        }

        switch (alt76) {
            case 1 :
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1921:4: '.'
                {
                match(input,46,FOLLOW_46_in_synpred12_InternalTalkMe4624); if (state.failed) return ;

                }
                break;
            case 2 :
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1923:6: ( ( '?.' ) )
                {
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1923:6: ( ( '?.' ) )
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1924:1: ( '?.' )
                {
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1924:1: ( '?.' )
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1925:2: '?.'
                {
                match(input,47,FOLLOW_47_in_synpred12_InternalTalkMe4638); if (state.failed) return ;

                }


                }


                }
                break;
            case 3 :
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1930:6: ( ( '*.' ) )
                {
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1930:6: ( ( '*.' ) )
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1931:1: ( '*.' )
                {
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1931:1: ( '*.' )
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:1932:2: '*.'
                {
                match(input,48,FOLLOW_48_in_synpred12_InternalTalkMe4658); if (state.failed) return ;

                }


                }


                }
                break;

        }


        }


        }
    }
    // $ANTLR end synpred12_InternalTalkMe

    // $ANTLR start synpred13_InternalTalkMe
    public final void synpred13_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2041:4: ( ( '(' ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2042:1: ( '(' )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2042:1: ( '(' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2043:2: '('
        {
        match(input,50,FOLLOW_50_in_synpred13_InternalTalkMe4885); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred13_InternalTalkMe

    // $ANTLR start synpred14_InternalTalkMe
    public final void synpred14_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2062:4: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2062:5: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2062:5: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2062:6: () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|'
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2062:6: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2063:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2063:2: ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )?
        int alt78=2;
        int LA78_0 = input.LA(1);

        if ( (LA78_0==RULE_ID||LA78_0==50||LA78_0==78) ) {
            alt78=1;
        }
        switch (alt78) {
            case 1 :
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2063:3: ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )*
                {
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2063:3: ( ( ruleJvmFormalParameter ) )
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2064:1: ( ruleJvmFormalParameter )
                {
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2064:1: ( ruleJvmFormalParameter )
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2065:1: ruleJvmFormalParameter
                {
                pushFollow(FOLLOW_ruleJvmFormalParameter_in_synpred14_InternalTalkMe4937);
                ruleJvmFormalParameter();

                state._fsp--;
                if (state.failed) return ;

                }


                }

                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2067:2: ( ',' ( ( ruleJvmFormalParameter ) ) )*
                loop77:
                do {
                    int alt77=2;
                    int LA77_0 = input.LA(1);

                    if ( (LA77_0==49) ) {
                        alt77=1;
                    }


                    switch (alt77) {
                	case 1 :
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2067:4: ',' ( ( ruleJvmFormalParameter ) )
                	    {
                	    match(input,49,FOLLOW_49_in_synpred14_InternalTalkMe4944); if (state.failed) return ;
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2068:1: ( ( ruleJvmFormalParameter ) )
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2069:1: ( ruleJvmFormalParameter )
                	    {
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2069:1: ( ruleJvmFormalParameter )
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2070:1: ruleJvmFormalParameter
                	    {
                	    pushFollow(FOLLOW_ruleJvmFormalParameter_in_synpred14_InternalTalkMe4951);
                	    ruleJvmFormalParameter();

                	    state._fsp--;
                	    if (state.failed) return ;

                	    }


                	    }


                	    }
                	    break;

                	default :
                	    break loop77;
                    }
                } while (true);


                }
                break;

        }

        match(input,52,FOLLOW_52_in_synpred14_InternalTalkMe4961); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred14_InternalTalkMe

    // $ANTLR start synpred16_InternalTalkMe
    public final void synpred16_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2676:4: ( 'else' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:2676:6: 'else'
        {
        match(input,54,FOLLOW_54_in_synpred16_InternalTalkMe6406); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred16_InternalTalkMe

    // $ANTLR start synpred17_InternalTalkMe
    public final void synpred17_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3300:4: ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3300:5: ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3300:5: ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3300:6: ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3300:6: ( ( ruleJvmTypeReference ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3301:1: ( ruleJvmTypeReference )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3301:1: ( ruleJvmTypeReference )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3302:1: ruleJvmTypeReference
        {
        pushFollow(FOLLOW_ruleJvmTypeReference_in_synpred17_InternalTalkMe7772);
        ruleJvmTypeReference();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3304:2: ( ( ruleValidID ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3305:1: ( ruleValidID )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3305:1: ( ruleValidID )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3306:1: ruleValidID
        {
        pushFollow(FOLLOW_ruleValidID_in_synpred17_InternalTalkMe7781);
        ruleValidID();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred17_InternalTalkMe

    // $ANTLR start synpred18_InternalTalkMe
    public final void synpred18_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3547:4: ( ( '(' ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3548:1: ( '(' )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3548:1: ( '(' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3549:2: '('
        {
        match(input,50,FOLLOW_50_in_synpred18_InternalTalkMe8230); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred18_InternalTalkMe

    // $ANTLR start synpred19_InternalTalkMe
    public final void synpred19_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3568:4: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3568:5: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3568:5: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3568:6: () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|'
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3568:6: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3569:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3569:2: ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )?
        int alt82=2;
        int LA82_0 = input.LA(1);

        if ( (LA82_0==RULE_ID||LA82_0==50||LA82_0==78) ) {
            alt82=1;
        }
        switch (alt82) {
            case 1 :
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3569:3: ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )*
                {
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3569:3: ( ( ruleJvmFormalParameter ) )
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3570:1: ( ruleJvmFormalParameter )
                {
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3570:1: ( ruleJvmFormalParameter )
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3571:1: ruleJvmFormalParameter
                {
                pushFollow(FOLLOW_ruleJvmFormalParameter_in_synpred19_InternalTalkMe8282);
                ruleJvmFormalParameter();

                state._fsp--;
                if (state.failed) return ;

                }


                }

                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3573:2: ( ',' ( ( ruleJvmFormalParameter ) ) )*
                loop81:
                do {
                    int alt81=2;
                    int LA81_0 = input.LA(1);

                    if ( (LA81_0==49) ) {
                        alt81=1;
                    }


                    switch (alt81) {
                	case 1 :
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3573:4: ',' ( ( ruleJvmFormalParameter ) )
                	    {
                	    match(input,49,FOLLOW_49_in_synpred19_InternalTalkMe8289); if (state.failed) return ;
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3574:1: ( ( ruleJvmFormalParameter ) )
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3575:1: ( ruleJvmFormalParameter )
                	    {
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3575:1: ( ruleJvmFormalParameter )
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3576:1: ruleJvmFormalParameter
                	    {
                	    pushFollow(FOLLOW_ruleJvmFormalParameter_in_synpred19_InternalTalkMe8296);
                	    ruleJvmFormalParameter();

                	    state._fsp--;
                	    if (state.failed) return ;

                	    }


                	    }


                	    }
                	    break;

                	default :
                	    break loop81;
                    }
                } while (true);


                }
                break;

        }

        match(input,52,FOLLOW_52_in_synpred19_InternalTalkMe8306); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred19_InternalTalkMe

    // $ANTLR start synpred20_InternalTalkMe
    public final void synpred20_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3817:3: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3817:4: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3817:4: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3817:5: () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|'
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3817:5: ()
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3818:1: 
        {
        }

        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3818:2: ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )?
        int alt84=2;
        int LA84_0 = input.LA(1);

        if ( (LA84_0==RULE_ID||LA84_0==50||LA84_0==78) ) {
            alt84=1;
        }
        switch (alt84) {
            case 1 :
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3818:3: ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )*
                {
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3818:3: ( ( ruleJvmFormalParameter ) )
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3819:1: ( ruleJvmFormalParameter )
                {
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3819:1: ( ruleJvmFormalParameter )
                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3820:1: ruleJvmFormalParameter
                {
                pushFollow(FOLLOW_ruleJvmFormalParameter_in_synpred20_InternalTalkMe8877);
                ruleJvmFormalParameter();

                state._fsp--;
                if (state.failed) return ;

                }


                }

                // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3822:2: ( ',' ( ( ruleJvmFormalParameter ) ) )*
                loop83:
                do {
                    int alt83=2;
                    int LA83_0 = input.LA(1);

                    if ( (LA83_0==49) ) {
                        alt83=1;
                    }


                    switch (alt83) {
                	case 1 :
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3822:4: ',' ( ( ruleJvmFormalParameter ) )
                	    {
                	    match(input,49,FOLLOW_49_in_synpred20_InternalTalkMe8884); if (state.failed) return ;
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3823:1: ( ( ruleJvmFormalParameter ) )
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3824:1: ( ruleJvmFormalParameter )
                	    {
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3824:1: ( ruleJvmFormalParameter )
                	    // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:3825:1: ruleJvmFormalParameter
                	    {
                	    pushFollow(FOLLOW_ruleJvmFormalParameter_in_synpred20_InternalTalkMe8891);
                	    ruleJvmFormalParameter();

                	    state._fsp--;
                	    if (state.failed) return ;

                	    }


                	    }


                	    }
                	    break;

                	default :
                	    break loop83;
                    }
                } while (true);


                }
                break;

        }

        match(input,52,FOLLOW_52_in_synpred20_InternalTalkMe8901); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred20_InternalTalkMe

    // $ANTLR start synpred21_InternalTalkMe
    public final void synpred21_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4193:2: ( ( ruleXExpression ) )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4194:1: ( ruleXExpression )
        {
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4194:1: ( ruleXExpression )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4195:1: ruleXExpression
        {
        pushFollow(FOLLOW_ruleXExpression_in_synpred21_InternalTalkMe9782);
        ruleXExpression();

        state._fsp--;
        if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred21_InternalTalkMe

    // $ANTLR start synpred22_InternalTalkMe
    public final void synpred22_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4264:5: ( 'catch' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4264:7: 'catch'
        {
        match(input,77,FOLLOW_77_in_synpred22_InternalTalkMe9927); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred22_InternalTalkMe

    // $ANTLR start synpred23_InternalTalkMe
    public final void synpred23_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4283:5: ( 'finally' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4283:7: 'finally'
        {
        match(input,76,FOLLOW_76_in_synpred23_InternalTalkMe9957); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred23_InternalTalkMe

    // $ANTLR start synpred25_InternalTalkMe
    public final void synpred25_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4431:3: ( '.' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4432:2: '.'
        {
        match(input,46,FOLLOW_46_in_synpred25_InternalTalkMe10304); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred25_InternalTalkMe

    // $ANTLR start synpred26_InternalTalkMe
    public final void synpred26_InternalTalkMe_fragment() throws RecognitionException {   
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4617:4: ( '<' )
        // ../it.spoli.dsl.talkme/src-gen/it/spoli/parser/antlr/internal/InternalTalkMe.g:4617:6: '<'
        {
        match(input,35,FOLLOW_35_in_synpred26_InternalTalkMe10761); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred26_InternalTalkMe

    // Delegated rules

    public final boolean synpred12_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred12_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred11_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred11_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred23_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred23_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred8_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred8_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred14_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred14_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred5_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred5_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred13_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred13_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred25_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred25_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred6_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred6_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred16_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred16_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred2_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred2_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred10_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred10_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred22_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred22_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred18_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred18_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred1_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred1_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred20_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred20_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred21_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred21_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred26_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred26_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred3_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred3_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred4_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred4_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred19_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred19_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred17_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred17_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred7_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred7_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred9_InternalTalkMe() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred9_InternalTalkMe_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }


    protected DFA29 dfa29 = new DFA29(this);
    protected DFA28 dfa28 = new DFA28(this);
    protected DFA55 dfa55 = new DFA55(this);
    protected DFA54 dfa54 = new DFA54(this);
    protected DFA61 dfa61 = new DFA61(this);
    protected DFA63 dfa63 = new DFA63(this);
    protected DFA72 dfa72 = new DFA72(this);
    static final String DFA29_eotS =
        "\74\uffff";
    static final String DFA29_eofS =
        "\1\2\73\uffff";
    static final String DFA29_minS =
        "\1\4\1\0\72\uffff";
    static final String DFA29_maxS =
        "\1\116\1\0\72\uffff";
    static final String DFA29_acceptS =
        "\2\uffff\1\2\70\uffff\1\1";
    static final String DFA29_specialS =
        "\1\uffff\1\0\72\uffff}>";
    static final String[] DFA29_transitionS = {
            "\3\2\5\uffff\1\2\11\uffff\1\2\2\uffff\31\2\1\1\1\2\1\uffff"+
            "\16\2\1\uffff\13\2",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA29_eot = DFA.unpackEncodedString(DFA29_eotS);
    static final short[] DFA29_eof = DFA.unpackEncodedString(DFA29_eofS);
    static final char[] DFA29_min = DFA.unpackEncodedStringToUnsignedChars(DFA29_minS);
    static final char[] DFA29_max = DFA.unpackEncodedStringToUnsignedChars(DFA29_maxS);
    static final short[] DFA29_accept = DFA.unpackEncodedString(DFA29_acceptS);
    static final short[] DFA29_special = DFA.unpackEncodedString(DFA29_specialS);
    static final short[][] DFA29_transition;

    static {
        int numStates = DFA29_transitionS.length;
        DFA29_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA29_transition[i] = DFA.unpackEncodedString(DFA29_transitionS[i]);
        }
    }

    class DFA29 extends DFA {

        public DFA29(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 29;
            this.eot = DFA29_eot;
            this.eof = DFA29_eof;
            this.min = DFA29_min;
            this.max = DFA29_max;
            this.accept = DFA29_accept;
            this.special = DFA29_special;
            this.transition = DFA29_transition;
        }
        public String getDescription() {
            return "2041:2: ( ( ( ( '(' ) )=> (lv_explicitOperationCall_16_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )? otherlv_21= ')' )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA29_1 = input.LA(1);

                         
                        int index29_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred13_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index29_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 29, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String DFA28_eotS =
        "\34\uffff";
    static final String DFA28_eofS =
        "\34\uffff";
    static final String DFA28_minS =
        "\1\4\2\0\31\uffff";
    static final String DFA28_maxS =
        "\1\116\2\0\31\uffff";
    static final String DFA28_acceptS =
        "\3\uffff\2\1\1\2\25\uffff\1\3";
    static final String DFA28_specialS =
        "\1\0\1\1\1\2\31\uffff}>";
    static final String[] DFA28_transitionS = {
            "\1\1\2\5\17\uffff\1\5\14\uffff\1\5\2\uffff\2\5\4\uffff\1\5"+
            "\5\uffff\1\2\1\33\1\4\1\5\1\uffff\1\5\1\uffff\1\5\3\uffff\3"+
            "\5\2\uffff\1\5\1\uffff\10\5\2\uffff\1\3",
            "\1\uffff",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA28_eot = DFA.unpackEncodedString(DFA28_eotS);
    static final short[] DFA28_eof = DFA.unpackEncodedString(DFA28_eofS);
    static final char[] DFA28_min = DFA.unpackEncodedStringToUnsignedChars(DFA28_minS);
    static final char[] DFA28_max = DFA.unpackEncodedStringToUnsignedChars(DFA28_maxS);
    static final short[] DFA28_accept = DFA.unpackEncodedString(DFA28_acceptS);
    static final short[] DFA28_special = DFA.unpackEncodedString(DFA28_specialS);
    static final short[][] DFA28_transition;

    static {
        int numStates = DFA28_transitionS.length;
        DFA28_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA28_transition[i] = DFA.unpackEncodedString(DFA28_transitionS[i]);
        }
    }

    class DFA28 extends DFA {

        public DFA28(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 28;
            this.eot = DFA28_eot;
            this.eof = DFA28_eof;
            this.min = DFA28_min;
            this.max = DFA28_max;
            this.accept = DFA28_accept;
            this.special = DFA28_special;
            this.transition = DFA28_transition;
        }
        public String getDescription() {
            return "2062:2: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_memberCallArguments_17_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_18_0= ruleXExpression ) ) (otherlv_19= ',' ( (lv_memberCallArguments_20_0= ruleXExpression ) ) )* ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA28_0 = input.LA(1);

                         
                        int index28_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA28_0==RULE_ID) ) {s = 1;}

                        else if ( (LA28_0==50) ) {s = 2;}

                        else if ( (LA28_0==78) && (synpred14_InternalTalkMe())) {s = 3;}

                        else if ( (LA28_0==52) && (synpred14_InternalTalkMe())) {s = 4;}

                        else if ( ((LA28_0>=RULE_STRING && LA28_0<=RULE_INT)||LA28_0==22||LA28_0==35||(LA28_0>=38 && LA28_0<=39)||LA28_0==44||LA28_0==53||LA28_0==55||LA28_0==57||(LA28_0>=61 && LA28_0<=63)||LA28_0==66||(LA28_0>=68 && LA28_0<=75)) ) {s = 5;}

                        else if ( (LA28_0==51) ) {s = 27;}

                         
                        input.seek(index28_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA28_1 = input.LA(1);

                         
                        int index28_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred14_InternalTalkMe()) ) {s = 4;}

                        else if ( (true) ) {s = 5;}

                         
                        input.seek(index28_1);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA28_2 = input.LA(1);

                         
                        int index28_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred14_InternalTalkMe()) ) {s = 4;}

                        else if ( (true) ) {s = 5;}

                         
                        input.seek(index28_2);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 28, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String DFA55_eotS =
        "\74\uffff";
    static final String DFA55_eofS =
        "\1\2\73\uffff";
    static final String DFA55_minS =
        "\1\4\1\0\72\uffff";
    static final String DFA55_maxS =
        "\1\116\1\0\72\uffff";
    static final String DFA55_acceptS =
        "\2\uffff\1\2\70\uffff\1\1";
    static final String DFA55_specialS =
        "\1\uffff\1\0\72\uffff}>";
    static final String[] DFA55_transitionS = {
            "\3\2\5\uffff\1\2\11\uffff\1\2\2\uffff\31\2\1\1\1\2\1\uffff"+
            "\16\2\1\uffff\13\2",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA55_eot = DFA.unpackEncodedString(DFA55_eotS);
    static final short[] DFA55_eof = DFA.unpackEncodedString(DFA55_eofS);
    static final char[] DFA55_min = DFA.unpackEncodedStringToUnsignedChars(DFA55_minS);
    static final char[] DFA55_max = DFA.unpackEncodedStringToUnsignedChars(DFA55_maxS);
    static final short[] DFA55_accept = DFA.unpackEncodedString(DFA55_acceptS);
    static final short[] DFA55_special = DFA.unpackEncodedString(DFA55_specialS);
    static final short[][] DFA55_transition;

    static {
        int numStates = DFA55_transitionS.length;
        DFA55_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA55_transition[i] = DFA.unpackEncodedString(DFA55_transitionS[i]);
        }
    }

    class DFA55 extends DFA {

        public DFA55(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 55;
            this.eot = DFA55_eot;
            this.eof = DFA55_eof;
            this.min = DFA55_min;
            this.max = DFA55_max;
            this.accept = DFA55_accept;
            this.special = DFA55_special;
            this.transition = DFA55_transition;
        }
        public String getDescription() {
            return "3547:2: ( ( ( ( '(' ) )=> (lv_explicitOperationCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA55_1 = input.LA(1);

                         
                        int index55_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred18_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index55_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 55, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String DFA54_eotS =
        "\34\uffff";
    static final String DFA54_eofS =
        "\34\uffff";
    static final String DFA54_minS =
        "\1\4\2\0\31\uffff";
    static final String DFA54_maxS =
        "\1\116\2\0\31\uffff";
    static final String DFA54_acceptS =
        "\3\uffff\2\1\1\2\25\uffff\1\3";
    static final String DFA54_specialS =
        "\1\0\1\1\1\2\31\uffff}>";
    static final String[] DFA54_transitionS = {
            "\1\1\2\5\17\uffff\1\5\14\uffff\1\5\2\uffff\2\5\4\uffff\1\5"+
            "\5\uffff\1\2\1\33\1\4\1\5\1\uffff\1\5\1\uffff\1\5\3\uffff\3"+
            "\5\2\uffff\1\5\1\uffff\10\5\2\uffff\1\3",
            "\1\uffff",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA54_eot = DFA.unpackEncodedString(DFA54_eotS);
    static final short[] DFA54_eof = DFA.unpackEncodedString(DFA54_eofS);
    static final char[] DFA54_min = DFA.unpackEncodedStringToUnsignedChars(DFA54_minS);
    static final char[] DFA54_max = DFA.unpackEncodedStringToUnsignedChars(DFA54_maxS);
    static final short[] DFA54_accept = DFA.unpackEncodedString(DFA54_acceptS);
    static final short[] DFA54_special = DFA.unpackEncodedString(DFA54_specialS);
    static final short[][] DFA54_transition;

    static {
        int numStates = DFA54_transitionS.length;
        DFA54_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA54_transition[i] = DFA.unpackEncodedString(DFA54_transitionS[i]);
        }
    }

    class DFA54 extends DFA {

        public DFA54(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 54;
            this.eot = DFA54_eot;
            this.eof = DFA54_eof;
            this.min = DFA54_min;
            this.max = DFA54_max;
            this.accept = DFA54_accept;
            this.special = DFA54_special;
            this.transition = DFA54_transition;
        }
        public String getDescription() {
            return "3568:2: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_featureCallArguments_9_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_featureCallArguments_12_0= ruleXExpression ) ) )* ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA54_0 = input.LA(1);

                         
                        int index54_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA54_0==RULE_ID) ) {s = 1;}

                        else if ( (LA54_0==50) ) {s = 2;}

                        else if ( (LA54_0==78) && (synpred19_InternalTalkMe())) {s = 3;}

                        else if ( (LA54_0==52) && (synpred19_InternalTalkMe())) {s = 4;}

                        else if ( ((LA54_0>=RULE_STRING && LA54_0<=RULE_INT)||LA54_0==22||LA54_0==35||(LA54_0>=38 && LA54_0<=39)||LA54_0==44||LA54_0==53||LA54_0==55||LA54_0==57||(LA54_0>=61 && LA54_0<=63)||LA54_0==66||(LA54_0>=68 && LA54_0<=75)) ) {s = 5;}

                        else if ( (LA54_0==51) ) {s = 27;}

                         
                        input.seek(index54_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA54_1 = input.LA(1);

                         
                        int index54_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred19_InternalTalkMe()) ) {s = 4;}

                        else if ( (true) ) {s = 5;}

                         
                        input.seek(index54_1);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA54_2 = input.LA(1);

                         
                        int index54_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred19_InternalTalkMe()) ) {s = 4;}

                        else if ( (true) ) {s = 5;}

                         
                        input.seek(index54_2);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 54, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String DFA61_eotS =
        "\34\uffff";
    static final String DFA61_eofS =
        "\34\uffff";
    static final String DFA61_minS =
        "\1\4\2\0\31\uffff";
    static final String DFA61_maxS =
        "\1\116\2\0\31\uffff";
    static final String DFA61_acceptS =
        "\3\uffff\2\1\1\2\25\uffff\1\3";
    static final String DFA61_specialS =
        "\1\0\1\1\1\2\31\uffff}>";
    static final String[] DFA61_transitionS = {
            "\1\1\2\5\17\uffff\1\5\14\uffff\1\5\2\uffff\2\5\4\uffff\1\5"+
            "\5\uffff\1\2\1\33\1\4\1\5\1\uffff\1\5\1\uffff\1\5\3\uffff\3"+
            "\5\2\uffff\1\5\1\uffff\10\5\2\uffff\1\3",
            "\1\uffff",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA61_eot = DFA.unpackEncodedString(DFA61_eotS);
    static final short[] DFA61_eof = DFA.unpackEncodedString(DFA61_eofS);
    static final char[] DFA61_min = DFA.unpackEncodedStringToUnsignedChars(DFA61_minS);
    static final char[] DFA61_max = DFA.unpackEncodedStringToUnsignedChars(DFA61_maxS);
    static final short[] DFA61_accept = DFA.unpackEncodedString(DFA61_acceptS);
    static final short[] DFA61_special = DFA.unpackEncodedString(DFA61_specialS);
    static final short[][] DFA61_transition;

    static {
        int numStates = DFA61_transitionS.length;
        DFA61_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA61_transition[i] = DFA.unpackEncodedString(DFA61_transitionS[i]);
        }
    }

    class DFA61 extends DFA {

        public DFA61(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 61;
            this.eot = DFA61_eot;
            this.eof = DFA61_eof;
            this.min = DFA61_min;
            this.max = DFA61_max;
            this.accept = DFA61_accept;
            this.special = DFA61_special;
            this.transition = DFA61_transition;
        }
        public String getDescription() {
            return "3817:1: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? '|' ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA61_0 = input.LA(1);

                         
                        int index61_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA61_0==RULE_ID) ) {s = 1;}

                        else if ( (LA61_0==50) ) {s = 2;}

                        else if ( (LA61_0==78) && (synpred20_InternalTalkMe())) {s = 3;}

                        else if ( (LA61_0==52) && (synpred20_InternalTalkMe())) {s = 4;}

                        else if ( ((LA61_0>=RULE_STRING && LA61_0<=RULE_INT)||LA61_0==22||LA61_0==35||(LA61_0>=38 && LA61_0<=39)||LA61_0==44||LA61_0==53||LA61_0==55||LA61_0==57||(LA61_0>=61 && LA61_0<=63)||LA61_0==66||(LA61_0>=68 && LA61_0<=75)) ) {s = 5;}

                        else if ( (LA61_0==51) ) {s = 27;}

                         
                        input.seek(index61_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA61_1 = input.LA(1);

                         
                        int index61_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred20_InternalTalkMe()) ) {s = 4;}

                        else if ( (true) ) {s = 5;}

                         
                        input.seek(index61_1);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA61_2 = input.LA(1);

                         
                        int index61_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred20_InternalTalkMe()) ) {s = 4;}

                        else if ( (true) ) {s = 5;}

                         
                        input.seek(index61_2);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 61, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String DFA63_eotS =
        "\74\uffff";
    static final String DFA63_eofS =
        "\1\31\73\uffff";
    static final String DFA63_minS =
        "\1\4\30\0\43\uffff";
    static final String DFA63_maxS =
        "\1\116\30\0\43\uffff";
    static final String DFA63_acceptS =
        "\31\uffff\1\2\41\uffff\1\1";
    static final String DFA63_specialS =
        "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+
        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27\43\uffff}>";
    static final String[] DFA63_transitionS = {
            "\1\1\1\17\1\15\5\uffff\1\31\11\uffff\1\12\2\uffff\12\31\1\10"+
            "\2\31\1\4\1\3\4\31\1\2\5\31\1\30\1\31\1\uffff\1\21\1\31\1\7"+
            "\1\31\1\6\3\31\1\22\1\23\1\24\2\31\1\11\1\uffff\1\5\1\13\1\14"+
            "\1\16\1\20\1\25\1\26\1\27\3\31",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA63_eot = DFA.unpackEncodedString(DFA63_eotS);
    static final short[] DFA63_eof = DFA.unpackEncodedString(DFA63_eofS);
    static final char[] DFA63_min = DFA.unpackEncodedStringToUnsignedChars(DFA63_minS);
    static final char[] DFA63_max = DFA.unpackEncodedStringToUnsignedChars(DFA63_maxS);
    static final short[] DFA63_accept = DFA.unpackEncodedString(DFA63_acceptS);
    static final short[] DFA63_special = DFA.unpackEncodedString(DFA63_specialS);
    static final short[][] DFA63_transition;

    static {
        int numStates = DFA63_transitionS.length;
        DFA63_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA63_transition[i] = DFA.unpackEncodedString(DFA63_transitionS[i]);
        }
    }

    class DFA63 extends DFA {

        public DFA63(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 63;
            this.eot = DFA63_eot;
            this.eof = DFA63_eof;
            this.min = DFA63_min;
            this.max = DFA63_max;
            this.accept = DFA63_accept;
            this.special = DFA63_special;
            this.transition = DFA63_transition;
        }
        public String getDescription() {
            return "4193:1: ( ( ( ruleXExpression ) )=> (lv_expression_2_0= ruleXExpression ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA63_1 = input.LA(1);

                         
                        int index63_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_1);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA63_2 = input.LA(1);

                         
                        int index63_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_2);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA63_3 = input.LA(1);

                         
                        int index63_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_3);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA63_4 = input.LA(1);

                         
                        int index63_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_4);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA63_5 = input.LA(1);

                         
                        int index63_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_5);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA63_6 = input.LA(1);

                         
                        int index63_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_6);
                        if ( s>=0 ) return s;
                        break;
                    case 6 : 
                        int LA63_7 = input.LA(1);

                         
                        int index63_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_7);
                        if ( s>=0 ) return s;
                        break;
                    case 7 : 
                        int LA63_8 = input.LA(1);

                         
                        int index63_8 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_8);
                        if ( s>=0 ) return s;
                        break;
                    case 8 : 
                        int LA63_9 = input.LA(1);

                         
                        int index63_9 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_9);
                        if ( s>=0 ) return s;
                        break;
                    case 9 : 
                        int LA63_10 = input.LA(1);

                         
                        int index63_10 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_10);
                        if ( s>=0 ) return s;
                        break;
                    case 10 : 
                        int LA63_11 = input.LA(1);

                         
                        int index63_11 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_11);
                        if ( s>=0 ) return s;
                        break;
                    case 11 : 
                        int LA63_12 = input.LA(1);

                         
                        int index63_12 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_12);
                        if ( s>=0 ) return s;
                        break;
                    case 12 : 
                        int LA63_13 = input.LA(1);

                         
                        int index63_13 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_13);
                        if ( s>=0 ) return s;
                        break;
                    case 13 : 
                        int LA63_14 = input.LA(1);

                         
                        int index63_14 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_14);
                        if ( s>=0 ) return s;
                        break;
                    case 14 : 
                        int LA63_15 = input.LA(1);

                         
                        int index63_15 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_15);
                        if ( s>=0 ) return s;
                        break;
                    case 15 : 
                        int LA63_16 = input.LA(1);

                         
                        int index63_16 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_16);
                        if ( s>=0 ) return s;
                        break;
                    case 16 : 
                        int LA63_17 = input.LA(1);

                         
                        int index63_17 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_17);
                        if ( s>=0 ) return s;
                        break;
                    case 17 : 
                        int LA63_18 = input.LA(1);

                         
                        int index63_18 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_18);
                        if ( s>=0 ) return s;
                        break;
                    case 18 : 
                        int LA63_19 = input.LA(1);

                         
                        int index63_19 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_19);
                        if ( s>=0 ) return s;
                        break;
                    case 19 : 
                        int LA63_20 = input.LA(1);

                         
                        int index63_20 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_20);
                        if ( s>=0 ) return s;
                        break;
                    case 20 : 
                        int LA63_21 = input.LA(1);

                         
                        int index63_21 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_21);
                        if ( s>=0 ) return s;
                        break;
                    case 21 : 
                        int LA63_22 = input.LA(1);

                         
                        int index63_22 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_22);
                        if ( s>=0 ) return s;
                        break;
                    case 22 : 
                        int LA63_23 = input.LA(1);

                         
                        int index63_23 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_23);
                        if ( s>=0 ) return s;
                        break;
                    case 23 : 
                        int LA63_24 = input.LA(1);

                         
                        int index63_24 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 25;}

                         
                        input.seek(index63_24);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 63, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String DFA72_eotS =
        "\74\uffff";
    static final String DFA72_eofS =
        "\1\2\73\uffff";
    static final String DFA72_minS =
        "\1\4\1\0\72\uffff";
    static final String DFA72_maxS =
        "\1\116\1\0\72\uffff";
    static final String DFA72_acceptS =
        "\2\uffff\1\2\70\uffff\1\1";
    static final String DFA72_specialS =
        "\1\uffff\1\0\72\uffff}>";
    static final String[] DFA72_transitionS = {
            "\3\2\5\uffff\1\2\11\uffff\1\2\2\uffff\12\2\1\1\20\2\1\uffff"+
            "\16\2\1\uffff\13\2",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA72_eot = DFA.unpackEncodedString(DFA72_eotS);
    static final short[] DFA72_eof = DFA.unpackEncodedString(DFA72_eofS);
    static final char[] DFA72_min = DFA.unpackEncodedStringToUnsignedChars(DFA72_minS);
    static final char[] DFA72_max = DFA.unpackEncodedStringToUnsignedChars(DFA72_maxS);
    static final short[] DFA72_accept = DFA.unpackEncodedString(DFA72_acceptS);
    static final short[] DFA72_special = DFA.unpackEncodedString(DFA72_specialS);
    static final short[][] DFA72_transition;

    static {
        int numStates = DFA72_transitionS.length;
        DFA72_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA72_transition[i] = DFA.unpackEncodedString(DFA72_transitionS[i]);
        }
    }

    class DFA72 extends DFA {

        public DFA72(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 72;
            this.eot = DFA72_eot;
            this.eof = DFA72_eof;
            this.min = DFA72_min;
            this.max = DFA72_max;
            this.accept = DFA72_accept;
            this.special = DFA72_special;
            this.transition = DFA72_transition;
        }
        public String getDescription() {
            return "4617:2: ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA72_1 = input.LA(1);

                         
                        int index72_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred26_InternalTalkMe()) ) {s = 59;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index72_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 72, _s, input);
            error(nvae);
            throw nvae;
        }
    }
 

    public static final BitSet FOLLOW_ruleSystem_in_entryRuleSystem75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSystem85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleSystem122 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleSystem139 = new BitSet(new long[]{0x0000000000003000L});
    public static final BitSet FOLLOW_rulePackage_in_ruleSystem165 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleSystem178 = new BitSet(new long[]{0x000000000003C012L});
    public static final BitSet FOLLOW_ruleMessage_in_ruleSystem199 = new BitSet(new long[]{0x000000000003C012L});
    public static final BitSet FOLLOW_ruleSubject_in_ruleSystem221 = new BitSet(new long[]{0x0000000000020012L});
    public static final BitSet FOLLOW_ruleInteraction_in_ruleSystem243 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_rulePackage_in_entryRulePackage280 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePackage290 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_13_in_rulePackage327 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_rulePackage348 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMessage_in_entryRuleMessage384 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMessage394 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDispatch_in_ruleMessage441 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInvitation_in_ruleMessage468 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRequest_in_ruleMessage495 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDispatch_in_entryRuleDispatch530 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDispatch540 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_14_in_ruleDispatch577 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleDispatch594 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleDispatch611 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInvitation_in_entryRuleInvitation647 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInvitation657 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_15_in_ruleInvitation694 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleInvitation711 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleInvitation728 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRequest_in_entryRuleRequest764 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRequest774 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_16_in_ruleRequest811 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRequest828 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleRequest845 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSubject_in_entryRuleSubject881 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSubject891 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_17_in_ruleSubject928 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleSubject945 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleSubject962 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInteraction_in_entryRuleInteraction998 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInteraction1008 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleInteraction1053 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_ruleInteraction1065 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleInteraction1085 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_ruleInteraction1097 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleInteraction1117 = new BitSet(new long[]{0x0000000000101000L});
    public static final BitSet FOLLOW_ruleSupport_in_ruleInteraction1138 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleInteraction1151 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSupport_in_entryRuleSupport1187 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSupport1197 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_20_in_ruleSupport1234 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleSupport1246 = new BitSet(new long[]{0x0000000000000000L,0x00000000000C0000L});
    public static final BitSet FOLLOW_ruleProtocol_in_ruleSupport1267 = new BitSet(new long[]{0x0000000000400000L});
    public static final BitSet FOLLOW_22_in_ruleSupport1279 = new BitSet(new long[]{0x0000000000800000L});
    public static final BitSet FOLLOW_23_in_ruleSupport1291 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleSupport1303 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleSupport1320 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_24_in_ruleSupport1337 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleSupport1349 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleSupport1366 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_25_in_ruleSupport1383 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXExpression_in_entryRuleXExpression1419 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXExpression1429 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXAssignment_in_ruleXExpression1475 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXAssignment_in_entryRuleXAssignment1509 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXAssignment1519 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleValidID_in_ruleXAssignment1577 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_ruleOpSingleAssign_in_ruleXAssignment1593 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXAssignment_in_ruleXAssignment1613 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXOrExpression_in_ruleXAssignment1643 = new BitSet(new long[]{0x0000000004000002L});
    public static final BitSet FOLLOW_ruleOpMultiAssign_in_ruleXAssignment1696 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXAssignment_in_ruleXAssignment1719 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpSingleAssign_in_entryRuleOpSingleAssign1759 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOpSingleAssign1770 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_21_in_ruleOpSingleAssign1807 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpMultiAssign_in_entryRuleOpMultiAssign1847 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOpMultiAssign1858 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_26_in_ruleOpMultiAssign1895 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXOrExpression_in_entryRuleXOrExpression1934 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXOrExpression1944 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXAndExpression_in_ruleXOrExpression1991 = new BitSet(new long[]{0x0000000008000002L});
    public static final BitSet FOLLOW_ruleOpOr_in_ruleXOrExpression2044 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXAndExpression_in_ruleXOrExpression2067 = new BitSet(new long[]{0x0000000008000002L});
    public static final BitSet FOLLOW_ruleOpOr_in_entryRuleOpOr2106 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOpOr2117 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_ruleOpOr2154 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXAndExpression_in_entryRuleXAndExpression2193 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXAndExpression2203 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXEqualityExpression_in_ruleXAndExpression2250 = new BitSet(new long[]{0x0000000010000002L});
    public static final BitSet FOLLOW_ruleOpAnd_in_ruleXAndExpression2303 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXEqualityExpression_in_ruleXAndExpression2326 = new BitSet(new long[]{0x0000000010000002L});
    public static final BitSet FOLLOW_ruleOpAnd_in_entryRuleOpAnd2365 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOpAnd2376 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_ruleOpAnd2413 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXEqualityExpression_in_entryRuleXEqualityExpression2452 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXEqualityExpression2462 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXRelationalExpression_in_ruleXEqualityExpression2509 = new BitSet(new long[]{0x0000000060000002L});
    public static final BitSet FOLLOW_ruleOpEquality_in_ruleXEqualityExpression2562 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXRelationalExpression_in_ruleXEqualityExpression2585 = new BitSet(new long[]{0x0000000060000002L});
    public static final BitSet FOLLOW_ruleOpEquality_in_entryRuleOpEquality2624 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOpEquality2635 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_ruleOpEquality2673 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_30_in_ruleOpEquality2692 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXRelationalExpression_in_entryRuleXRelationalExpression2732 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXRelationalExpression2742 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXOtherOperatorExpression_in_ruleXRelationalExpression2789 = new BitSet(new long[]{0x0000000F80000002L});
    public static final BitSet FOLLOW_31_in_ruleXRelationalExpression2825 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_ruleXRelationalExpression2850 = new BitSet(new long[]{0x0000000F80000002L});
    public static final BitSet FOLLOW_ruleOpCompare_in_ruleXRelationalExpression2911 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXOtherOperatorExpression_in_ruleXRelationalExpression2934 = new BitSet(new long[]{0x0000000F80000002L});
    public static final BitSet FOLLOW_ruleOpCompare_in_entryRuleOpCompare2974 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOpCompare2985 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_ruleOpCompare3023 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_33_in_ruleOpCompare3042 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_34_in_ruleOpCompare3061 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_ruleOpCompare3080 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXOtherOperatorExpression_in_entryRuleXOtherOperatorExpression3120 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXOtherOperatorExpression3130 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXAdditiveExpression_in_ruleXOtherOperatorExpression3177 = new BitSet(new long[]{0x0000003000000002L});
    public static final BitSet FOLLOW_ruleOpOther_in_ruleXOtherOperatorExpression3230 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXAdditiveExpression_in_ruleXOtherOperatorExpression3253 = new BitSet(new long[]{0x0000003000000002L});
    public static final BitSet FOLLOW_ruleOpOther_in_entryRuleOpOther3292 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOpOther3303 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_36_in_ruleOpOther3341 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleOpOther3360 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXAdditiveExpression_in_entryRuleXAdditiveExpression3400 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXAdditiveExpression3410 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXMultiplicativeExpression_in_ruleXAdditiveExpression3457 = new BitSet(new long[]{0x000000C000000002L});
    public static final BitSet FOLLOW_ruleOpAdd_in_ruleXAdditiveExpression3510 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXMultiplicativeExpression_in_ruleXAdditiveExpression3533 = new BitSet(new long[]{0x000000C000000002L});
    public static final BitSet FOLLOW_ruleOpAdd_in_entryRuleOpAdd3572 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOpAdd3583 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_38_in_ruleOpAdd3621 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_39_in_ruleOpAdd3640 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXMultiplicativeExpression_in_entryRuleXMultiplicativeExpression3680 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXMultiplicativeExpression3690 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXUnaryOperation_in_ruleXMultiplicativeExpression3737 = new BitSet(new long[]{0x00000F0000000002L});
    public static final BitSet FOLLOW_ruleOpMulti_in_ruleXMultiplicativeExpression3790 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXUnaryOperation_in_ruleXMultiplicativeExpression3813 = new BitSet(new long[]{0x00000F0000000002L});
    public static final BitSet FOLLOW_ruleOpMulti_in_entryRuleOpMulti3852 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOpMulti3863 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_40_in_ruleOpMulti3901 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_41_in_ruleOpMulti3920 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_42_in_ruleOpMulti3939 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_43_in_ruleOpMulti3958 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXUnaryOperation_in_entryRuleXUnaryOperation3998 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXUnaryOperation4008 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpUnary_in_ruleXUnaryOperation4066 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXCastedExpression_in_ruleXUnaryOperation4087 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXCastedExpression_in_ruleXUnaryOperation4116 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpUnary_in_entryRuleOpUnary4152 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOpUnary4163 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_44_in_ruleOpUnary4201 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_39_in_ruleOpUnary4220 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_38_in_ruleOpUnary4239 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXCastedExpression_in_entryRuleXCastedExpression4279 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXCastedExpression4289 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXMemberFeatureCall_in_ruleXCastedExpression4336 = new BitSet(new long[]{0x0000200000000002L});
    public static final BitSet FOLLOW_45_in_ruleXCastedExpression4371 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_ruleXCastedExpression4394 = new BitSet(new long[]{0x0000200000000002L});
    public static final BitSet FOLLOW_ruleXMemberFeatureCall_in_entryRuleXMemberFeatureCall4432 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXMemberFeatureCall4442 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXPrimaryExpression_in_ruleXMemberFeatureCall4489 = new BitSet(new long[]{0x0001C00000000002L});
    public static final BitSet FOLLOW_46_in_ruleXMemberFeatureCall4538 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleValidID_in_ruleXMemberFeatureCall4561 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_ruleOpSingleAssign_in_ruleXMemberFeatureCall4577 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXAssignment_in_ruleXMemberFeatureCall4599 = new BitSet(new long[]{0x0001C00000000002L});
    public static final BitSet FOLLOW_46_in_ruleXMemberFeatureCall4685 = new BitSet(new long[]{0x0000000800000010L});
    public static final BitSet FOLLOW_47_in_ruleXMemberFeatureCall4709 = new BitSet(new long[]{0x0000000800000010L});
    public static final BitSet FOLLOW_48_in_ruleXMemberFeatureCall4746 = new BitSet(new long[]{0x0000000800000010L});
    public static final BitSet FOLLOW_35_in_ruleXMemberFeatureCall4775 = new BitSet(new long[]{0x0004000000000010L,0x000000000000C000L});
    public static final BitSet FOLLOW_ruleJvmArgumentTypeReference_in_ruleXMemberFeatureCall4796 = new BitSet(new long[]{0x0002000400000000L});
    public static final BitSet FOLLOW_49_in_ruleXMemberFeatureCall4809 = new BitSet(new long[]{0x0004000000000010L,0x000000000000C000L});
    public static final BitSet FOLLOW_ruleJvmArgumentTypeReference_in_ruleXMemberFeatureCall4830 = new BitSet(new long[]{0x0002000400000000L});
    public static final BitSet FOLLOW_34_in_ruleXMemberFeatureCall4844 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleValidID_in_ruleXMemberFeatureCall4869 = new BitSet(new long[]{0x0005C00000000002L});
    public static final BitSet FOLLOW_50_in_ruleXMemberFeatureCall4903 = new BitSet(new long[]{0xE2BC10C800400070L,0x0000000000004FF4L});
    public static final BitSet FOLLOW_ruleXShortClosure_in_ruleXMemberFeatureCall4978 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXMemberFeatureCall5006 = new BitSet(new long[]{0x000A000000000000L});
    public static final BitSet FOLLOW_49_in_ruleXMemberFeatureCall5019 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXMemberFeatureCall5040 = new BitSet(new long[]{0x000A000000000000L});
    public static final BitSet FOLLOW_51_in_ruleXMemberFeatureCall5057 = new BitSet(new long[]{0x0001C00000000002L});
    public static final BitSet FOLLOW_ruleXPrimaryExpression_in_entryRuleXPrimaryExpression5098 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXPrimaryExpression5108 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXConstructorCall_in_ruleXPrimaryExpression5155 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXBlockExpression_in_ruleXPrimaryExpression5182 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXSwitchExpression_in_ruleXPrimaryExpression5209 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXFeatureCall_in_ruleXPrimaryExpression5236 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXLiteral_in_ruleXPrimaryExpression5263 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXIfExpression_in_ruleXPrimaryExpression5290 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXForLoopExpression_in_ruleXPrimaryExpression5317 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXWhileExpression_in_ruleXPrimaryExpression5344 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXDoWhileExpression_in_ruleXPrimaryExpression5371 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXThrowExpression_in_ruleXPrimaryExpression5398 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXReturnExpression_in_ruleXPrimaryExpression5425 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXTryCatchFinallyExpression_in_ruleXPrimaryExpression5452 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXParenthesizedExpression_in_ruleXPrimaryExpression5479 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXLiteral_in_entryRuleXLiteral5514 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXLiteral5524 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXClosure_in_ruleXLiteral5571 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXBooleanLiteral_in_ruleXLiteral5598 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXIntLiteral_in_ruleXLiteral5625 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXNullLiteral_in_ruleXLiteral5652 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXStringLiteral_in_ruleXLiteral5679 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXTypeLiteral_in_ruleXLiteral5706 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXClosure_in_entryRuleXClosure5741 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXClosure5751 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_22_in_ruleXClosure5797 = new BitSet(new long[]{0x0014000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_ruleXClosure5819 = new BitSet(new long[]{0x0012000000000000L});
    public static final BitSet FOLLOW_49_in_ruleXClosure5832 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_ruleXClosure5853 = new BitSet(new long[]{0x0012000000000000L});
    public static final BitSet FOLLOW_52_in_ruleXClosure5869 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXClosure5890 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_25_in_ruleXClosure5902 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXShortClosure_in_entryRuleXShortClosure5938 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXShortClosure5948 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_ruleXShortClosure6046 = new BitSet(new long[]{0x0012000000000000L});
    public static final BitSet FOLLOW_49_in_ruleXShortClosure6059 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_ruleXShortClosure6080 = new BitSet(new long[]{0x0012000000000000L});
    public static final BitSet FOLLOW_52_in_ruleXShortClosure6096 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXShortClosure6119 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXParenthesizedExpression_in_entryRuleXParenthesizedExpression6155 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXParenthesizedExpression6165 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_50_in_ruleXParenthesizedExpression6202 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXParenthesizedExpression6224 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_51_in_ruleXParenthesizedExpression6235 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXIfExpression_in_entryRuleXIfExpression6271 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXIfExpression6281 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_53_in_ruleXIfExpression6327 = new BitSet(new long[]{0x0004000000000000L});
    public static final BitSet FOLLOW_50_in_ruleXIfExpression6339 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXIfExpression6360 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_51_in_ruleXIfExpression6372 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXIfExpression6393 = new BitSet(new long[]{0x0040000000000002L});
    public static final BitSet FOLLOW_54_in_ruleXIfExpression6414 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXIfExpression6436 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXSwitchExpression_in_entryRuleXSwitchExpression6474 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXSwitchExpression6484 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_55_in_ruleXSwitchExpression6530 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleValidID_in_ruleXSwitchExpression6552 = new BitSet(new long[]{0x0100000000000000L});
    public static final BitSet FOLLOW_56_in_ruleXSwitchExpression6564 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXSwitchExpression6587 = new BitSet(new long[]{0x0200000000000000L});
    public static final BitSet FOLLOW_57_in_ruleXSwitchExpression6599 = new BitSet(new long[]{0x1104000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleXCasePart_in_ruleXSwitchExpression6620 = new BitSet(new long[]{0x1D04000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_58_in_ruleXSwitchExpression6634 = new BitSet(new long[]{0x0100000000000000L});
    public static final BitSet FOLLOW_56_in_ruleXSwitchExpression6646 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXSwitchExpression6667 = new BitSet(new long[]{0x0800000000000000L});
    public static final BitSet FOLLOW_59_in_ruleXSwitchExpression6681 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXCasePart_in_entryRuleXCasePart6717 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXCasePart6727 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_ruleXCasePart6773 = new BitSet(new long[]{0x1100000000000000L});
    public static final BitSet FOLLOW_60_in_ruleXCasePart6787 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXCasePart6808 = new BitSet(new long[]{0x0100000000000000L});
    public static final BitSet FOLLOW_56_in_ruleXCasePart6822 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXCasePart6843 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXForLoopExpression_in_entryRuleXForLoopExpression6879 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXForLoopExpression6889 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_61_in_ruleXForLoopExpression6935 = new BitSet(new long[]{0x0004000000000000L});
    public static final BitSet FOLLOW_50_in_ruleXForLoopExpression6947 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_ruleXForLoopExpression6968 = new BitSet(new long[]{0x0100000000000000L});
    public static final BitSet FOLLOW_56_in_ruleXForLoopExpression6980 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXForLoopExpression7001 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_51_in_ruleXForLoopExpression7013 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXForLoopExpression7034 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXWhileExpression_in_entryRuleXWhileExpression7070 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXWhileExpression7080 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_62_in_ruleXWhileExpression7126 = new BitSet(new long[]{0x0004000000000000L});
    public static final BitSet FOLLOW_50_in_ruleXWhileExpression7138 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXWhileExpression7159 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_51_in_ruleXWhileExpression7171 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXWhileExpression7192 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXDoWhileExpression_in_entryRuleXDoWhileExpression7228 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXDoWhileExpression7238 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_63_in_ruleXDoWhileExpression7284 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXDoWhileExpression7305 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_62_in_ruleXDoWhileExpression7317 = new BitSet(new long[]{0x0004000000000000L});
    public static final BitSet FOLLOW_50_in_ruleXDoWhileExpression7329 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXDoWhileExpression7350 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_51_in_ruleXDoWhileExpression7362 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXBlockExpression_in_entryRuleXBlockExpression7398 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXBlockExpression7408 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_57_in_ruleXBlockExpression7454 = new BitSet(new long[]{0xEAA410C800400070L,0x0000000000000FF7L});
    public static final BitSet FOLLOW_ruleXExpressionInsideBlock_in_ruleXBlockExpression7476 = new BitSet(new long[]{0xEAA410C800401070L,0x0000000000000FF7L});
    public static final BitSet FOLLOW_12_in_ruleXBlockExpression7489 = new BitSet(new long[]{0xEAA410C800400070L,0x0000000000000FF7L});
    public static final BitSet FOLLOW_59_in_ruleXBlockExpression7505 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXExpressionInsideBlock_in_entryRuleXExpressionInsideBlock7541 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXExpressionInsideBlock7551 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXVariableDeclaration_in_ruleXExpressionInsideBlock7598 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXExpressionInsideBlock7625 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXVariableDeclaration_in_entryRuleXVariableDeclaration7660 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXVariableDeclaration7670 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_64_in_ruleXVariableDeclaration7723 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_65_in_ruleXVariableDeclaration7754 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_ruleXVariableDeclaration7802 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleValidID_in_ruleXVariableDeclaration7823 = new BitSet(new long[]{0x0000000000200002L});
    public static final BitSet FOLLOW_ruleValidID_in_ruleXVariableDeclaration7852 = new BitSet(new long[]{0x0000000000200002L});
    public static final BitSet FOLLOW_21_in_ruleXVariableDeclaration7866 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXVariableDeclaration7887 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_entryRuleJvmFormalParameter7925 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleJvmFormalParameter7935 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_ruleJvmFormalParameter7981 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleValidID_in_ruleJvmFormalParameter8003 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXFeatureCall_in_entryRuleXFeatureCall8039 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXFeatureCall8049 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStaticQualifier_in_ruleXFeatureCall8106 = new BitSet(new long[]{0x0000000800000010L,0x0000000000000004L});
    public static final BitSet FOLLOW_35_in_ruleXFeatureCall8120 = new BitSet(new long[]{0x0004000000000010L,0x000000000000C000L});
    public static final BitSet FOLLOW_ruleJvmArgumentTypeReference_in_ruleXFeatureCall8141 = new BitSet(new long[]{0x0002000400000000L});
    public static final BitSet FOLLOW_49_in_ruleXFeatureCall8154 = new BitSet(new long[]{0x0004000000000010L,0x000000000000C000L});
    public static final BitSet FOLLOW_ruleJvmArgumentTypeReference_in_ruleXFeatureCall8175 = new BitSet(new long[]{0x0002000400000000L});
    public static final BitSet FOLLOW_34_in_ruleXFeatureCall8189 = new BitSet(new long[]{0x0000000800000010L,0x0000000000000004L});
    public static final BitSet FOLLOW_ruleIdOrSuper_in_ruleXFeatureCall8214 = new BitSet(new long[]{0x0004000000000002L});
    public static final BitSet FOLLOW_50_in_ruleXFeatureCall8248 = new BitSet(new long[]{0xE2BC10C800400070L,0x0000000000004FF4L});
    public static final BitSet FOLLOW_ruleXShortClosure_in_ruleXFeatureCall8323 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXFeatureCall8351 = new BitSet(new long[]{0x000A000000000000L});
    public static final BitSet FOLLOW_49_in_ruleXFeatureCall8364 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXFeatureCall8385 = new BitSet(new long[]{0x000A000000000000L});
    public static final BitSet FOLLOW_51_in_ruleXFeatureCall8402 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleIdOrSuper_in_entryRuleIdOrSuper8441 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleIdOrSuper8452 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleValidID_in_ruleIdOrSuper8499 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_66_in_ruleIdOrSuper8523 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStaticQualifier_in_entryRuleStaticQualifier8564 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleStaticQualifier8575 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleValidID_in_ruleStaticQualifier8622 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_67_in_ruleStaticQualifier8640 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_ruleXConstructorCall_in_entryRuleXConstructorCall8681 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXConstructorCall8691 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_68_in_ruleXConstructorCall8737 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_ruleXConstructorCall8760 = new BitSet(new long[]{0x0004000800000000L});
    public static final BitSet FOLLOW_35_in_ruleXConstructorCall8773 = new BitSet(new long[]{0x0004000000000010L,0x000000000000C000L});
    public static final BitSet FOLLOW_ruleJvmArgumentTypeReference_in_ruleXConstructorCall8794 = new BitSet(new long[]{0x0002000400000000L});
    public static final BitSet FOLLOW_49_in_ruleXConstructorCall8807 = new BitSet(new long[]{0x0004000000000010L,0x000000000000C000L});
    public static final BitSet FOLLOW_ruleJvmArgumentTypeReference_in_ruleXConstructorCall8828 = new BitSet(new long[]{0x0002000400000000L});
    public static final BitSet FOLLOW_34_in_ruleXConstructorCall8842 = new BitSet(new long[]{0x0004000000000000L});
    public static final BitSet FOLLOW_50_in_ruleXConstructorCall8856 = new BitSet(new long[]{0xE2BC10C800400070L,0x0000000000004FF4L});
    public static final BitSet FOLLOW_ruleXShortClosure_in_ruleXConstructorCall8918 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXConstructorCall8946 = new BitSet(new long[]{0x000A000000000000L});
    public static final BitSet FOLLOW_49_in_ruleXConstructorCall8959 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXConstructorCall8980 = new BitSet(new long[]{0x000A000000000000L});
    public static final BitSet FOLLOW_51_in_ruleXConstructorCall8997 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXBooleanLiteral_in_entryRuleXBooleanLiteral9033 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXBooleanLiteral9043 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_69_in_ruleXBooleanLiteral9090 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_70_in_ruleXBooleanLiteral9114 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXNullLiteral_in_entryRuleXNullLiteral9164 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXNullLiteral9174 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_71_in_ruleXNullLiteral9220 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXIntLiteral_in_entryRuleXIntLiteral9256 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXIntLiteral9266 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleXIntLiteral9317 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXStringLiteral_in_entryRuleXStringLiteral9358 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXStringLiteral9368 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleXStringLiteral9419 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXTypeLiteral_in_entryRuleXTypeLiteral9460 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXTypeLiteral9470 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_72_in_ruleXTypeLiteral9516 = new BitSet(new long[]{0x0004000000000000L});
    public static final BitSet FOLLOW_50_in_ruleXTypeLiteral9528 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_ruleXTypeLiteral9551 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_51_in_ruleXTypeLiteral9563 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXThrowExpression_in_entryRuleXThrowExpression9599 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXThrowExpression9609 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_73_in_ruleXThrowExpression9655 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXThrowExpression9676 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXReturnExpression_in_entryRuleXReturnExpression9712 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXReturnExpression9722 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_74_in_ruleXReturnExpression9768 = new BitSet(new long[]{0xE2A410C800400072L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXReturnExpression9799 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXTryCatchFinallyExpression_in_entryRuleXTryCatchFinallyExpression9836 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXTryCatchFinallyExpression9846 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_75_in_ruleXTryCatchFinallyExpression9892 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXTryCatchFinallyExpression9913 = new BitSet(new long[]{0x0000000000000000L,0x0000000000003000L});
    public static final BitSet FOLLOW_ruleXCatchClause_in_ruleXTryCatchFinallyExpression9943 = new BitSet(new long[]{0x0000000000000002L,0x0000000000003000L});
    public static final BitSet FOLLOW_76_in_ruleXTryCatchFinallyExpression9965 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXTryCatchFinallyExpression9987 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_76_in_ruleXTryCatchFinallyExpression10009 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXTryCatchFinallyExpression10030 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXCatchClause_in_entryRuleXCatchClause10068 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXCatchClause10078 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_77_in_ruleXCatchClause10123 = new BitSet(new long[]{0x0004000000000000L});
    public static final BitSet FOLLOW_50_in_ruleXCatchClause10136 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_ruleXCatchClause10157 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_51_in_ruleXCatchClause10169 = new BitSet(new long[]{0xE2A410C800400070L,0x0000000000000FF4L});
    public static final BitSet FOLLOW_ruleXExpression_in_ruleXCatchClause10190 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_entryRuleQualifiedName10227 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleQualifiedName10238 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleValidID_in_ruleQualifiedName10285 = new BitSet(new long[]{0x0000400000000002L});
    public static final BitSet FOLLOW_46_in_ruleQualifiedName10313 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleValidID_in_ruleQualifiedName10336 = new BitSet(new long[]{0x0000400000000002L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_entryRuleJvmTypeReference10383 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleJvmTypeReference10393 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmParameterizedTypeReference_in_ruleJvmTypeReference10440 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXFunctionTypeRef_in_ruleJvmTypeReference10467 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXFunctionTypeRef_in_entryRuleXFunctionTypeRef10502 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleXFunctionTypeRef10512 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_50_in_ruleXFunctionTypeRef10550 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_ruleXFunctionTypeRef10571 = new BitSet(new long[]{0x000A000000000000L});
    public static final BitSet FOLLOW_49_in_ruleXFunctionTypeRef10584 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_ruleXFunctionTypeRef10605 = new BitSet(new long[]{0x000A000000000000L});
    public static final BitSet FOLLOW_51_in_ruleXFunctionTypeRef10619 = new BitSet(new long[]{0x0000000000000000L,0x0000000000004000L});
    public static final BitSet FOLLOW_78_in_ruleXFunctionTypeRef10633 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_ruleXFunctionTypeRef10654 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmParameterizedTypeReference_in_entryRuleJvmParameterizedTypeReference10690 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleJvmParameterizedTypeReference10700 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_ruleJvmParameterizedTypeReference10748 = new BitSet(new long[]{0x0000000800000002L});
    public static final BitSet FOLLOW_35_in_ruleJvmParameterizedTypeReference10769 = new BitSet(new long[]{0x0004000000000010L,0x000000000000C000L});
    public static final BitSet FOLLOW_ruleJvmArgumentTypeReference_in_ruleJvmParameterizedTypeReference10791 = new BitSet(new long[]{0x0002000400000000L});
    public static final BitSet FOLLOW_49_in_ruleJvmParameterizedTypeReference10804 = new BitSet(new long[]{0x0004000000000010L,0x000000000000C000L});
    public static final BitSet FOLLOW_ruleJvmArgumentTypeReference_in_ruleJvmParameterizedTypeReference10825 = new BitSet(new long[]{0x0002000400000000L});
    public static final BitSet FOLLOW_34_in_ruleJvmParameterizedTypeReference10839 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmArgumentTypeReference_in_entryRuleJvmArgumentTypeReference10877 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleJvmArgumentTypeReference10887 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_ruleJvmArgumentTypeReference10934 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmWildcardTypeReference_in_ruleJvmArgumentTypeReference10961 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmWildcardTypeReference_in_entryRuleJvmWildcardTypeReference10996 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleJvmWildcardTypeReference11006 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_79_in_ruleJvmWildcardTypeReference11052 = new BitSet(new long[]{0x0000000000000002L,0x0000000000010004L});
    public static final BitSet FOLLOW_ruleJvmUpperBound_in_ruleJvmWildcardTypeReference11074 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmLowerBound_in_ruleJvmWildcardTypeReference11101 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmUpperBound_in_entryRuleJvmUpperBound11139 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleJvmUpperBound11149 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_80_in_ruleJvmUpperBound11186 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_ruleJvmUpperBound11207 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmUpperBoundAnded_in_entryRuleJvmUpperBoundAnded11243 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleJvmUpperBoundAnded11253 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_81_in_ruleJvmUpperBoundAnded11290 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_ruleJvmUpperBoundAnded11311 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmLowerBound_in_entryRuleJvmLowerBound11347 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleJvmLowerBound11357 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_66_in_ruleJvmLowerBound11394 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_ruleJvmLowerBound11415 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleValidID_in_entryRuleValidID11454 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleValidID11465 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleValidID11504 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_82_in_ruleProtocol11562 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_83_in_ruleProtocol11579 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpMultiAssign_in_synpred1_InternalTalkMe1664 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpOr_in_synpred2_InternalTalkMe2012 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpAnd_in_synpred3_InternalTalkMe2271 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpEquality_in_synpred4_InternalTalkMe2530 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_31_in_synpred5_InternalTalkMe2806 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpCompare_in_synpred6_InternalTalkMe2879 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpOther_in_synpred7_InternalTalkMe3198 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpAdd_in_synpred8_InternalTalkMe3478 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOpMulti_in_synpred9_InternalTalkMe3758 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_45_in_synpred10_InternalTalkMe4352 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_46_in_synpred11_InternalTalkMe4506 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleValidID_in_synpred11_InternalTalkMe4515 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_ruleOpSingleAssign_in_synpred11_InternalTalkMe4521 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_46_in_synpred12_InternalTalkMe4624 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_47_in_synpred12_InternalTalkMe4638 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_48_in_synpred12_InternalTalkMe4658 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_50_in_synpred13_InternalTalkMe4885 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_synpred14_InternalTalkMe4937 = new BitSet(new long[]{0x0012000000000000L});
    public static final BitSet FOLLOW_49_in_synpred14_InternalTalkMe4944 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_synpred14_InternalTalkMe4951 = new BitSet(new long[]{0x0012000000000000L});
    public static final BitSet FOLLOW_52_in_synpred14_InternalTalkMe4961 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_54_in_synpred16_InternalTalkMe6406 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmTypeReference_in_synpred17_InternalTalkMe7772 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleValidID_in_synpred17_InternalTalkMe7781 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_50_in_synpred18_InternalTalkMe8230 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_synpred19_InternalTalkMe8282 = new BitSet(new long[]{0x0012000000000000L});
    public static final BitSet FOLLOW_49_in_synpred19_InternalTalkMe8289 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_synpred19_InternalTalkMe8296 = new BitSet(new long[]{0x0012000000000000L});
    public static final BitSet FOLLOW_52_in_synpred19_InternalTalkMe8306 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_synpred20_InternalTalkMe8877 = new BitSet(new long[]{0x0012000000000000L});
    public static final BitSet FOLLOW_49_in_synpred20_InternalTalkMe8884 = new BitSet(new long[]{0x0004000000000010L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleJvmFormalParameter_in_synpred20_InternalTalkMe8891 = new BitSet(new long[]{0x0012000000000000L});
    public static final BitSet FOLLOW_52_in_synpred20_InternalTalkMe8901 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleXExpression_in_synpred21_InternalTalkMe9782 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_77_in_synpred22_InternalTalkMe9927 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_76_in_synpred23_InternalTalkMe9957 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_46_in_synpred25_InternalTalkMe10304 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_synpred26_InternalTalkMe10761 = new BitSet(new long[]{0x0000000000000002L});

}